Looks okay I think although I find the seat locking again a bit overkill. I don't really see a scenario where a wine process would be used across seats, can this really happen on Wayland?
I understand that as the event is dynamically sent we may have to support it, but I would find it simpler if we could assume that we have a seat from the start (eventually waiting for it on startup, idk), and where we'd just abort if the seat is removed.