Mixing upward callbacks with downward ones is the issue. It is a well know reasons for messing-up states & calling for need for otherwise-undeeded state machines. Events carry a built-in execution deferral mechanism that prevent the risk for up & down callback yoyo. You can read read http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony for more details about the danger of mixing sync & async on the same code path.

The reason why Enyo provides events is exactly to address this issue a consistent manner, with no need for the app developer to bother about the internals of the called library.