So I guess something like this?
1 - Reliable messages are given a flag indicating they are reliable (used by the receiving end), in addition to some kind of incrementing message ID.
2 - A given message once sent will be resent periodically until acknowledgment is received.
3 - A given message, when received, will be buffered and only processed if the message just prior to it has been processed (so reliable messages 1, 2, and 3 are guaranteed to be processed in the exact order they were sent)
4 - A given message, when received, will be discarded if the message ID has already been processed.
That should pretty much cover everything, right? Should be easy enough to do with SendQuickly.