JMS is good to talk between servers in a cluster. Frinstance we keep track of who's logged on. When you log on or off one server it publishes a message to let the other servers know. That's a variety of "distributed cache" which has many other applications.
You can use JMS to kick off long-running asynchronous processes. You're not supposed to start new threads inside an EJB container, but you can send a message to a Message Driven Bean on the same machine that will run in its own
thread.
You can play with others outside your server. My company uses MQ-Series for all kinds of communication, and with an IBM JMS provider we can send to and receive from other systems. We use the "assured delivery" and "persistent queue" features to make sure that we get all inbound messages, even if we happen to be down for a while.
Any of that sound useful to you?