Event-driven architecture tends to be a more efficient method of communicating between systems. This is because the subscribers don't have to continually check for updates (polling), publishers don't have to worry about which subscribers are listening, and adding or removing publishers and subscribers don't involve changes in code or even configuration.
As such, Platform Events tend to be more efficient in areas they are designed to be used in (e.g. notifying external systems). Generally speaking, anything you can do with a Platform Event you can do with something else instead. However, there is one notable exception.
Normally, in Salesforce, all the results of a transaction, except for callouts, can be rolled back in the face of a fatal error, such as an uncaught exception or a governor limit being exceeded. Callouts themselves are limited to before any database-altering methods are called, such as a DML operation. However, you can use a PE with a Deliver Immediately setting to write data somewhere, even if the transaction ultimately fails.
This is useful for writing debug logs, crash data, or pretty much anything else you can think of before the crash occurs. Of course, you have to be able to call the publish function, so you can't log data from, say, a limit exception, but it's great for retaining data regarding a controlled error condition.
Considering that callouts are blocked once the database has been altered, PE is the only way you can have any data survive a transaction. It's incredibly niche, but can be extremely useful. The rest of the time, PEs work for small workloads, despite their own governor limits.