Hi Sofia,
the "technically possible" things tend to get a bit mixed with the "conceptual things" here, but I'll do my best to answer the question.
Conceptually, when sending a command, you want confirmation that your command was accepted. That doesn't mean the end-result is already exactly as you expected it. For example: TransferMoneyCommand would confirm that the transfer was initiated, but doesn't guarantee that the transfer has been executed. If I understand your concern correctly, you want to be able to be notified when the transaction is completed.
Conceptually, the best way to do this, is via an event. But you say that you would have to listen to "all possible end-events". A short answer would be: yes. But you make it sound like there are a lot of possible ways to end. In that case, let's go back to the definition of an Event: "a notification that something important happened in the domain". What's important, depends on many factors. In your case, the fact that it has completed is already important. In your event design, you should take that into account.
On way to do that, is by defining a hierarchy of events. Have an abstract MoneyTransferCompletedEvent. Implementations could be MoneyTransferSuccesful and MoneyTransferFailed. Perhaps not the best example, but let's take it as it is. Event handlers can then choose whether they listen to the abstract event, not caring how it finished, or listen to only a specific implementation, if they want to know more about the why. That way, a handler can choose what level of detail it is interested in, and will not explicitly need to listen to many different types.
Lastly, you could use a view model to get the status. In Axon 3.2, we are currently working on Subscription queries. You could use that mechanism to receive updates on specific state changes in a view model. Until then, polling could be an alternative.
Hope this helps.
Cheers,
Allard