@zachleat I actually made a (very lazy) fork of `is-land` for similar reasons.
https://github.com/dgp1130/Hydrator/blob/b266eaf4c269a28e365c46aa075819f42621c1b5/src/examples/is-land/is-land.ts
https://github.com/dgp1130/Hydrator/blob/b266eaf4c269a28e365c46aa075819f42621c1b5/src/examples/deference.html#L49-L71
You mentioned the question of "how to handle two instances of the same component?", have you considered `defer-hydration` support?
https://github.com/webcomponents-cg/community-protocols/pull/15
I found that worked pretty well for my use case, but I'm not sure if there's a place for that in the official library. I was planning to make an issue about it but hadn't gotten around to it.