I've put together a new implementation using xattr. Fortunately it wasn't too difficult, and it is indeed a bit simpler. It also is kinder to some edge cases related to querying attributes from a opened file.
The implementation still uses a ?-suffixed name for files with a reparse tag. Otherwise we'd have to force segment-by-segment resolution for all files so we can check whether a reparse point exists, which seems very bad. As such there's still a bit of potential for race conditions, but I don't see a way to avoid that. At least there are still no meaningful race conditions within a prefix.
Some interactions with hard links still can't quite work with this approach. Notably, because we move the file out of the way when adding a reparse point, adding a reparse point to a hardlinked file (or removing one) can't affect the other entries. I think that's the only thing that doesn't work, though.