Dude you are talking about prediction and correction .ue4’s network does exactly that since start. Hell even ue3 did the same thing .
When ue4 is waiting for something to change it uses the existing values until it receives new one from the server and as soon as it does it corrects the game state as it should be.
"
(essentially repeating the old inputs; player 2 will keep walking forward, etc.)."
Yes that’s what ue4 does every time to give the game a fluent feel. Look at simulated proxies. Sure you’ll need to handle changes manually for things in repnotify but rest is the same.
So before adding in ggpo I recommend you to try ue4’s stock netcode and see the results yourself