I think that JSF can either be one of the simplest ways to do
JEE web development or one of the most complex.
A basic JSF app needs vanilla JavaBeans, JSF view definitions, and a set of navigation rules. Plus, of course, the stock infrastructure.
The first thing that can start making life more complicated is when you start using short-circuiting options on the controls.
The second complication is when you start coding JSF-specific code into your backing beans. Something that almost everyone does too much and too early, me included.
The [i]real[/b] fun begins when you start playing with the less obvious lifecycle stages.
After that, it's pretty much all a downhill slide.
More than any other technology I know of, JSF is one where you should always ask yourself how deep into trouble do you need to get. And then ask again. The architecture makes simple things simple and complex things possible. Not everything is as simple as it could be, but as a general rule, most apps shouldn't be spending a lot of effort rummaging around in the guts of the framework.