Let's say you have a user that registered, and a controller that handles it. You write everything in the controller to register them and send off an email welcoming them, as well as giving them roles and other things maybe. This can become very single use case and restrictive, and require you to copy everything to another controller if you wanted to reuse the code.
Now with events and listeners (the event is really just the model in my opinion), you can have multiple events with the same model, and you name the event what you want to be the "start of the tree". The listeners are under that and will fire because that event did, and let you do things while being able to use the passed information from the event. So let's say $user in this example, as long as $user is passed on the call to the event, you can now use anything in the $user object, like $user->name, in your listeners
The benefit is that you can move a lot away from the controller. Move the role setting to a listener, move the email sending to another listener, etc. And just have 1 event called something like UserRegisteredEvent that will fire all those listeners. You can also easily reuse them in something like the admin dashboard part of the application and just call the event you already have, and all the listeners will follow. Or even make a new event and only attach the new event to some of those existing listeners, but without having to redo much code (for example, a new event called AdminPanelUserRegisteredEvent will only be attached to SendRegistrationEmailListener)
Hopefully that kinda helps some people coming across this later