It's a message. Mapping protocol units to messages was always your business.
> What if the client misses an update?
Sequence numbers on updates combined with a "fill in" mechanism through a separate request.
> What if the client loses connectivity?
Then more important things won't work either.
> How can the server detect and clean up clients that have disappeared?
The SSE client will restart dropped connections. You can have the server opportunistically close connections that haven't received messages recently. The browser will automatically reconnect if the object is still alive on the client side.
> For that, I would say that long polling (or even just polling) is the clear winner.
Coordinating polling intervals while simultaneously avoiding strong bursting behavior is genuinely not fun.