Please take a look at the Data Layer Manager and AA Product String Builder extensions from Search Discovery.
The Data Layer Manager provides a standard way for applications to trigger Launch rules and to access the information in the data layer. It also cleanly handles the issues around asynchronous Launch load by de-queuing any events pushed prior to the Launch init.
I have an update coming very soon that will provide:
1) A new event type (Data Layer Push)
2) A new data element type (Context Aware Data Element) that ensures that application context is properly preserved when referencing a data layer value.
The interface from the application is pushing events onto a data layer array. For example, to trigger an event representing a "Product Added" (to cart), the following might be the application's action:
window.appEventData = window.appEventData || [];
This would trigger any rule that is configured to use the Data Layer Manager > Data Layer Push event with Event set to "Product Added".

Launch can have as many rules as needed triggered off the event that was pushed (and using the payload data that was passed). An example of an AA action sequence might have "AA: Clear Vars" > "AA: Set Vars" > "AA Product String: Set Vars" > "AA: Send Beacon". The "AA: Set Vars" action would set the "prodView" event and any other simple "s" variables.
The "AA Product String: Set Vars" action would handle the Product String setup as below:

I think that if the Angularitics system included a configurable way of filtering the slew of Angular lifecycle events to those that we care most about and a way to transform scope into just the desired attributes the solution would be really strong.