@jessewilson it’s an application level messaging protocol, it brings you more structure and features than raw websockets. Destinations (routes), headers, subscriptions, receipts, transactions... All of which could of course be implemented ad hoc, but when you use a standard you usually find libraries already implemented for you, and compatible server implementations. For instance Spring already supports STOMP out of the box, and it’s the first thing you find when you look for websockets in Spring.
We could ask the same question for why use HTTP, it technically brings nothing you can’t do with TCP, because you could literally reinvent it yourself in a different way. It’s just higher level and standard.