LWC - Using Wire vs Imperative for Apex Communication
Wire methods take care of the entire life cycle of an attribute when it changes, including fetching calling the method, updating the attribute, and and refreshing the UI, all in often a single line of code (or just a few for custom error handling). While you could do all this imperatively, it would require significant amounts of code. In other words, yes, wire methods are basically just a "shortcut" for calling Apex imperatively, but you should not discount those savings, which could easily be hundreds of lines of code in a large component. Also, specifically, the wired method approach means you don't need to write custom setters to make sure the method is called every time the attribute is updated, or remember to call the method imperatively every time. This centralizes calling the method to a single location, making it much less likely you'll forget to call the method when appropriate.
I have found @wire is especially useful when you want to get a single or list of records without modifying any of the return values.
Think of using force:hasRecordId and using LDS for example, you can do this with less code with @wire now.
LWC docs use of recordId
Calling imperatively is the way to go when you want to call an Apex method on demand. Some use cases: On a LWC Button click, perform custom validation of related data on a record page, send related data to an external system, show a custom toast to user based on results in Apex, etc.