The system doesn't have to be imprecise or messy. And there's no reason why the authoritative simulation should not be perfect. But you do have to accept that information takes time to travel, so you either:
- wait for it to arrive, and wait for a reply confirming it arrived
- assume it will arrive, and act on that assumption, being ready to correct the assumption later
It's totally possible for a client-side simulation to exactly match the server-side simulation - providing it waits for all data from the server before performing any simulation! That is totally workable in some cases (e.g. Chess or other slow-paced games), it's something you can pretend to do with some game types (e.g. RTS where you pretend to start the unit's order locally but actually wait for a server response before starting the move), and impractical/impossible with others (e.g. FPS where you really must move the local player before the server will have time to confirm). It's all about the tradeoffs.