But
I'm reluctant to introduce such machinery just to handle a few
procedures in a single SRFI.

I agree with this in principle, but I wager that keyword arguments would be useful in many other places in R7RS-large. For example, in opening a socket, or stipulating that a sort procedure be stable.

Without keyword arguments, we could handle this with user-supplied "merger" procedures (or maybe "selector") that you suggested earlier. The set implementation calls (merger early late), where early and late are equal according to the set's comparator, and early was encountered before late; merger must return the single object to include in the set. Then, either a set has a single merger that is installed when it is created; or, all of the procedures that may insert objects need variants that accept a merger parameter, and we need to create a set/merger, set-adjoint/merger, list->set/merger, etc.

Kevin Wortman