seatd is not currently tracking which devices are part of which seat.
An ability to assign devices to seats is necessary. Ideas:
In case of dynamic solutions, it may be necessary to add
device_removed events to avoid races with seat clients otherwise doing their own device tracking.
Direct udev/devd integration should preferably be avoided.
How about keeping it simple and having one seatd instance per seat? Each seatd would have its own unix credentials, and unix permissions are used on devices to connect them to a seat.
SEATD_SOCK is used to select which seat a compositor session is running on, and the seatd sockets are also guarded by unix permissions. Or the launcher could pass an already connected seatd socket à la WAYLAND_SOCKET.
Multiple daemons could indeed be used to offer the seats, but the primary problem remains knowing what seat a device belongs to, so that other seats can be blocked from opening unrelated devices.