FacesContext is unique to each request. Not only is it not unique to an application, it's not unique to the user session. The FacesServlet builds it when a JSF request comes in, uses it to manage the JSF request/response process, then tosses it away once the reponse has been sent back. It builds a whole new FacesContext on the next JSF request that comes in. That's why generic servlets and JSPs get NullPointerExceptions. They don't build FacesContext's. Only the FacesServlet does.
There are several ways to share data between webapps and they're not JSF-specific. One way is to share session data. That tends to be fairly low overhead, but it only works in limited configurations. And you have to specially configure the server(s) that do the session sharing.
A more robust way is to simply keep the info in persistent storage. This is more flexible, but may be more overhead. The overall penalty can be reduced, though, if you use a shared cache mechanism.