Review: Mouse API step 1: sol.input and pressed/released events

"returning false will call on_input() for the game, map and every menus even if we don't have to"
Exactly.

A function is supposed to assume the least about its callers. This is good practice: best for code separation and code reusability.
This function does not know anything about sol.main, the game, the map, the menus, etc or about whatever the rest of the engine will do about this event. It does not know if its caller will handle the event in a different way.

What this function knows is that it does not forward the event to the Lua API. In other words, it is not handled. It is simply ignored. Then it is the responsability to the caller to decide what to do: discard it, send it to other objects that may or may not ignore it, or do something else.