Would it be possible and effective to put something in the game, maybe some separate process, that runs on both the host PC and the joiner's PC that checks the connection state between the two online players before allowing data to be sent to the other player? It seems now that maybe the game sends out what each player is doing and just assumes that the data is transmitted well and at the same time is receiving data from each player. What can happen is that maybe one player's computer receives data about the other player's movement but there is a delay before the other player receives his opponent's data. With peer-to-peer games, this can be exploited and is probably harder to control, as the game probably assumes that the data is goint out OK, when actually there may be a line signal interruption or some network issue whereby, for the one with this network issue, the outgoing packets from one player (his) are delayed but the incoming packets are still received and processed by the game such that an advantage is given to the player with the odd issue. If there were, on the computer of the opponent of this person with the network issue, a process that detects when data from the opponent doesn't arrive and doesn't send out data to that opponent until this issue is resolved, then maybe it would be more fair for both players.
I apologize if these are things you already do in the game. It's just a question and a suggestion in case it may be helpful. Here are some links to related issues:
Colyseus: A Distributed Architecture for Online Multiplayer Gameshttp://www.stanford.edu/class/cs340v/papers/colyseus.pdf
PKTown: A Peer-to-Peer Middleware to Support
IPTV and Multiplayer Online Gameshttp://www.zhenxiao.com/iptv2006/Camera_Ready/PKTown-060319.pdf
Cheating in networked computer games – A reviewhttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.83.9005&rep=rep1&type=pdf
(may be slow to load)