CelMare - imo game don't compare all in-game values one by one. It's not like game is sending hp, mana, coordinates, every single tower hp, citadel hp, position of all minions, their hp, state etc every 3 seconds. I believe on your computer game takes all this data and makes from it just 1 single control value (eg sum all values divided by something to make it smaller), and compare just 1 single string of data between computers (if it's different, something is wrong and desync popup). So it's not that easy, game just "see" someones eg. HP is different. When you change this HP on your PC, sum of all values will be different, so others will see desync, but their computer CAN'T tell which exactely value is wrong. It's just impossible (bandwith usage) and stupid to send WHOLE data between all players every 3 seconds to compare their game state. Just think how many things you would have to check "in fly".
About synchronizing the game. Sure it's possible. But you will have to send whole data to person who has desync. So they have to write new functions to compare every object 1 by 1 from eg host. That's possible to make, but for sure it's not easy. Resynching can easly fail, because there's no guarantee your computer will behave as it should after change your game state (towers which was destroyed are fine now, DG/minion positions are moved and so on - basically whole game state will suddenly change). So what eg. moved minions should do now, if they are in the "middle of fight" on the other comp ? Maybe game should send too, that some specific minotaur is 2/5 way to throw his hammer on the other team archer's head ? It would be really hard to coordinate all those little things. And, of course, if they don't coordinate those details, 3 seconds later game will desync again ! Because archer which suppose to die, on your computer just didn't (or died 0.2 sec later than it should, which changes whole game state again) !