It seems like SeatHandler::new_seat is only called when new globals are added at runtime, and not when SeatState::new is called :/
This doesn't seem to be a bug, but just being due to Dispatch not having an on_bind method or similar.
For now the workaround seems to be to apply new_seat manually.