You might want to consider the CommandDispatcher API, described here:
It lets you send/broadcast commands, either sync or async, to nodes in the cluster. You could maintain an Infinispan Cache<String, Node>, and dispatch a message command to the node corresponding to the user or set of users to which a user wants to communicate. Internally, it is based on the JGroups MessageDispatcher.
How would you call an EJB method inside the command?