This looks really good. I am wondering if this could help streamlining processes. At the moment for example its not easy to keep track of all the possibile event sequences and listener actions when executing the checkout flow. Say I need to implement a different checkout flow ( for example "one click checkout" ) but still need to keep all events consistent with sylius architecture. 
I need to go through all checkout steps, and write down a little graph of all events to make sure I don't miss something when I 'rearrange' the flow.
It would be nice if there was some class that could be responsable for handling this graph so I can look at it and see all possible graph path *along with the events they trigger*.

Do you think finite's transition functions could be a good place to centralize event triggering in a more readable way? (Maybe you have already been implying this and I missed it)

Sorry if I am getting a little OT here, but so far in extending Sylius for my own purposes understanding and keeping track of all events has been the most time consuming task :)