Can't the tunneling software detect when the upper TCP is retransmitting segments and drop them?
That would give the lower TCP enough time to transmit the original segment.
That would give the lower TCP enough time to transmit the original segment.
Some middleboxes will also do terrible things to your TCP streams (restrictive firewalls only allowing TCP are good candidates for that), and then all bets are off.
If you're really required to use TCP, the "fake TCP" approach that others in sibling threads have mentioned seems more promising (but again, beware of middleboxes).