Seems like all you're looking for is reliable UDP.
Some customization to enet source, or better yet, the use of RakNet (which is amazing, by the way) would give you what you're looking for.
I was always led to believe that tcp + nat punchthrough was nearly pointless as to how much more complicated it can be compared to udp + nat punchthrough. So why not use reliable udp and you have your nat punchthrough and tcp reliability.
Aside from what you're looking for, with r-udp it's also always nice to have a dynamic 'realiable' or 'not' switch to all your packets, and as far as i've seen, there is no downside to r-udp...it's no slower than tcp.
Some customization to enet source, or better yet, the use of RakNet (which is amazing, by the way) would give you what you're looking for.
I was always led to believe that tcp + nat punchthrough was nearly pointless as to how much more complicated it can be compared to udp + nat punchthrough. So why not use reliable udp and you have your nat punchthrough and tcp reliability.
Aside from what you're looking for, with r-udp it's also always nice to have a dynamic 'realiable' or 'not' switch to all your packets, and as far as i've seen, there is no downside to r-udp...it's no slower than tcp.