WebSocket is over TCP, so still ordered. I think by message-based GP is talking not only about message framing (which WebSocket provides) but also reliable out-of-order delivery.
Other people have probably thought about it more than I have, but the way I see it working is that a set of unacked messages are stored on each end of the connection. When a connection receives a message, it acks it by ID. When acks come out of the order the client sent them in (or after a timeout period), it re-sends the packet that may have dropped.
If every message is getting dropped, the set of unacked messages fills up and the connection stops accepting messages from the application, similar to TCP in that situation.
I mostly work with TCP so haven't had to deal with unreliable channels generally, but I do use a similar approach at the application level for reliable delivery across reconnects.
The most active multiplayer Doom port is Zandronum, using the Doomseeker server browser to join games. Mac support may be a bit flaky, but I think it currently works (join the Discord for help).
I've always much preferred Zandronum over Zdaemon because it's open source and it has much more advanced mod capabilities (with much more Zdoom/Gzdoom mod support than Zdaemon), supporting mods adding game modes like the PVE Invasion mode.