Well, I don't know about all the time negotiation, that might be annoying for the user (command delay is unconstant). I do know that in starcraft there's a latency setting feature, so that the user manually sets the latency to low, high or extra high - meaning the command delay is small, medium, or large. Then the user just sets the latency higher until there are no pauses in the game due to sync... not sure how it does the pauses though.
You could have one system pause, wait for the late client to catch up, then unpause it for the other client when both are at the same packet number. If need be you could have a latency screen show up with something such as: "Player X is lagging....attempting to catch up".
Sorry if this has been brought up before, but I think this is similar to how they did it in Starcraft.
do u meen like send cmd, pause-> recv cmd, then send back frame when it was processed then recv frame and catchup, this might work but ud see random fluctuations of the game speed, kinda like when u sit on the tv remote and u wonder why it keeps going from normal play to fast forward