Yes, you are correct, I treat the mouse as a separate kind of event.
As you said I could have treated the touch as mouse events but then I would have lost some flexibility.
I prefer to offer to the user the possibility to perform this kind of "mouse simulation" if it is needed but without embedding it in the engine as the only way available. I don't want to remove the ability to use a mouse on Android (which I deem useful for GUI based tools, like
SpookyGhost) or to use a touch screen on a desktop machine as a first-class input system.
I offer both events and polling as they are two faces of the same coin and they allow for different programming styles, as you said. Besides, some backend might offer just one approach or the other and having both makes the API always consistent.