Yes, the local client part is clear. But for the server part to be self hosted, the vendor would need to know how to reach you / your device.
Currently, they only go "hey, I have a message for user "Justin "! Google, can you make sure they get it?". And Google takes that message, figures out which backend server your phone is currently connected to, routes to that server, the server hands it to your phone, and then you get a nice ad about CandyCrush or whatever.
If you were to host your own server, there would be an additional layer of figuring out which backend this message needs to be routed to. And for that, every vendor would need to maintain a list of backend and which users / devices are using which. Or, a third party (Google?) would need to offer a service that does this part for the vendor.
This would technically be possible, but as far as I know is not a part of the current "standards" for push notifications.