Push via service worker é a evolução natural disso, concordo. Fui com polling porque queria validar o conceito rápido, e 30s de delay é aceitável para o caso de uso do BloodLink. Implementar service worker num MVP adiciona uma camada de complexidade que, naquele momento, não compensava. O seu ponto sobre VAPID keys é bom, não é segredo de Estado, mas ainda precisa de um servidor pra despachar as notificações, que é onde a complexidade realmente fica. Se o projeto escalar e o polling virar gargalo, push é o próximo passo óbvio.
Respondendo a "minha resposta: não precisa de WebSocket e nem..." dentro da publicação Como implementei o sistema de notificações do BloodLink sem WebSockets
1