You can dispatch an event whenever you want - in controller, in dataProvider or in any other place in which you have access to EventDispatcher.
As stated in symfony doc:
The Symfony EventDispatcher component implements the Mediator pattern
in a simple and effective way to make all these things possible and to
make your projects truly extensible.
Advantage of using events is that your controller class (or any other you dispatch event from) is totally decoupled from real event handling. You can think of it like "fire and forget" meaning that you just dispatch an event - who and what will be done with that is not your business.
In your example you just add an order and dispatch event. When someone will be writing plugin for your system he/she will just add listener for that event and will handle it in his/her way - for example send email that order was added or reindex search engine. Note that you can add multiple event listeners to the same event.
Read more about Mediator pattern