The term Facelets is used to refer to the JavaServerTM Faces View Definition Framework, which is a page declaration language that was developed for use with JavaServer Faces technology. As of JavaServer Faces 2.0, Facelets is a part of JavaServer Faces specification and also the preferred presentation technology for building JavaServer Faces based applications.
Not sure if we really need JSTL with JSF. JSTL, as far as I know, is a standards tage library supporting tasks like iteration, formatting and internationalization. JSF, when used with extensions like PrimeFaces or RichFaces, provides these features through the components themselves.
JSF is simply a specification.
RichFaces, MyFaces, Mojarra are different implementations of this specification. They all follow the specs and provide you the implementation libraries - but some like RichFaces - provide additional modules/widgets which may not be portable.
mojarra is Sun's reference implementation of JSF. There is also one from Apache. You will always need one of these, I prefer Mojarra all the time.
Richfaces, rcfaces, icefaces and all these things are libraries that provide extra components to use with your JSF project.
JSTL I think is never needed for JSF, although there may be a lib dependency, but I'm not sure.
For a long and happy life, don't use JSTL tags in JSF Views. Steven isn't alone in suspecting that you might need the JSTL jar, though. Just don't actually use the JSTL tags. Even if you're not using one of the extension tagsets such as RichFaces, PrimeFaces, Tomahawk, etc.
Facelets, on the other hand can be one of your very best friends!
Loudly announcing something is true and finding out you're wrong makes you feel foolish.
Finding out you're wrong and refusing to admit it makes you LOOK foolish.