I agree, there are other alternatives out there, however, facelets and SEAM were not around when we first chose JSF 😞
I only briefly looked at SEAM so I'm not sure whether it could be integrated in to a MyFaces based app, but it's definitely something to look at. As is Shale now that's been "separated" from Struts, they also have a dialog framework with a similar "conversation" state concept.
As for the first question/comment, we don't delegate to a JSP to determine what's running we just examine the result of FacesContext's getViewRoot().getViewId().
Again, I agree there are other alternatives i.e. using a variable in the session but that didn't seem any more elegant than the approach I took. Do you have any suggestions?