I need to look into this! I made a little networked 2D physics thing (just bouncing balls) and I was surprised how well it stays in sync, because of course both machines just simulate the same result.
I added some interactivity and simulated lag / packet loss, at that point I added an interpolation function so an entity could have a "target" and gradually slide there over a few frames. I've seen some other games do that as well.
I haven't gone very in depth on this, but VALVE has an excellent article on the subject, also covering input prediction and lag compensation:
https://developer.valvesoftware.com/wiki/Source_Multiplayer_...