Nice... looks very familiar...
with the difference that we use a message queue instead of an event array "in between"... gives us some other options, like having multiple subscribers to the same message queue... messages can be cached, and replayed to a new subscriber... waiting for listeners to be subscribed (aka waiting for Launch/Analytics to be loaded)... prioritize "page view" message (aka it is called before any other event messages on the same page, so that page context can be served with the other events)...
I have some colleagues who have build this way of working on top of Angulartics in Angular2, making use of the Service queue principle to pass the events...
But definite a very good approach to more event based analytics... and very useful...