That does sound like React is doing a lot of work to work around some issue. As OP said:
"This is an example of React doing too much."
I agree the React implementation is very complex, but in a way that's by design: we add features to React when it allows us to move complexity out of our product code and into a framework.
Like, yes, implementing batching in React was complicated, but in exchange the developer doesn't have to think about it anymore. It just works!
We call non-discrete events (like mousemove) "continuous", and for those we will batch updates across multiple events.
We've been testing this at Facebook for a while and we think our model is really solid, handling all the common cases and a bunch of edge cases, too. If you try it out and find something unexpected, please let us know and we'll fix it!