Both serve the same purpose but have different interfaces. The eventHandler has onEvent() and isFailOnException() whereas executionListener has notify(). Any reasons of having two different artifacts here. The same applies for taskListener which has notify() method.
Execution listeners are meant to listen to a limited set of process execution actions like start, end and take. So you can add some specific logic before a service task or user task is started or ended. Event listeners allow you to listen to a large set of events that are thrown from the Activiti Engine. These events are lower level events like entity created and job executed etc.