One of the most visible places where developers and site builders will still need to interact with hooks are the entity lifecycle hooks (presave/create/insert/update/predelete/delete).
Now that we have our own reasonably performant EventDispatcher, there is no reason not to fire an event every time the matching hook is fired.
Contrib can do this by overriding the invokeHook() method of the controller, but core should do this too as soon as possible.
Open question:
Use one generic event (EntityEvent with a getEntity() and getEntityTypeId() methods) or a class per entity type (NodeEvent with a getNode()), defined via the entity annotation. Or both? (use the generic event if the more specific one isn't declared).
The same choice will reflect on the event id as well.