I know it's shameless self-promotion, but JGN 2.0 offers all of these features and more.

In JGN you can simply create a MessageServer, establish a client connection, and then invoke messageClient.getOutputStream(myShortId) / messageClient.getInputStream(myShortId) where myShortId represents a unique short for that specific stream. It offers guaranteed delivery, ordered delivery, and provides support for both UDP and TCP.
While I'm tooting my own horn, I'll add that I recently added RemoteObjects as well, but you can see the following link for information about that:
http://www.captiveimagination.com/forum/topics/about-multiple-buffers-when-using-bufferstrategy/92/view.html