JSF is HTML. HTML is not XML. JSF xhtml is XML, but only at the source-code level, not at the destination, since JSF converts it to HTML.
Above and beyond all that, however, is the fact the in JSF, JSF expects to be the sole driver of the HttpServletResponse headers and datastream. If you attempt to insert yourself into the process, you will collide with JSF's assumptions on how to handle the output.
JSPX, on the other hand, is a very good way to generate XML response data, since you can template the XML format instead of simply hammering things into place. And JSPX has JSP tags that allow setting things like the Content-type header which JSF does not.
JSF web applications are J2EE web applications that use JSF. JSF doesn't have to control every URL that comes in and every response that goes back, it just facilitates the processing of HTML form-based processes. In cases where you're dealing with something other than HTML, a servlet or JSP is better. The JSF and non-JSF portions of the webapp can freely communicate, since JSF session-scope backing beans are the exact same thing as ordinary J2EE session-scope backing beans. The only distinction is that JSF created the beans automatically on-demand if they didn't already exist.