This has grown a lot since I last took a look :-)
My memory is a pretty fuzzy of why this was implemented as it is/how it works. I think the main idea is that if the message is for a list, it is placed on the maillist queue. The handling MDB then expands the list, and delivers the message to the local mailbox queue for the local users and to the remote mail queue for the list's remote users.
I only changed it to use Hibernate instead of Entity Bean (EJB 2). I didn't look at any of the actual delivery pieces. I made sure not to change any of the interfaces, I only added a new implementation to store the list addresses.
I think your approach will work. One thing you could to is group messages by domain, and create 1 Mail object & JMS message per domain. This will allow delivery in parallel (perhaps help with performance). If you have lots of messages per domain, you may have to group the TO addresses for the same domain into blocks. I believe the SMTP spec says something that mail servers MAY restrict the number of RCPT TO headers.