I think there may be some confusion here about which type of "session" you're referring to.
JSF works with
J2EE HttpSessions seamlessly. It will create sessions as needed and store objects as session attributes using the Managed Bean capabilities of JSF.
However, it sounds like you are (also?) referring to EJB Session Beans.
JSF has no built-in persistence support, so the persistence code in your JSF app is up to you and would be coded in the same way as non-JSF persistence code.
DTO's are pretty much obsolete in EJB3, since the actual entity objects can be used directly in non-persistence code, but that's EJB, not JSF.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.