I may well be missing something, but I'm not sure I see your problem here.
(defn foo [& {x :x y :y :as args :or {x "x-default" y "y-default"}}]
args)
This is checking input args for an :x keyword. If found, it's binding the associated value to 'x. Else it's binding the default value to 'x.
Either way, it's also binding all the args as originally given to 'args.
So with (foo :y "boo!") we have at this point:
* All args as originally given, bound to 'args. So '(:y "boo!")
* A map of symbols to default values. So {x "x-default" y "y-default"}
* Bindings as a result of the destructuring. So [x "x-default" y "boo!"]
What I'm suggesting might be useful, is destructuring sugar to bind one additional map: {:x "x-default" :y "boo!"}.
The clojure.core/destructure code is pretty hairy, so I may be missing some implementation-specific reason why this would be difficult to do. But I don't see anything logically inconsistent or surprising about wanting to do it. It'd be just another binding, and so not outside the scope of what destructure is tasked with doing.
Indeed, I find real-world situations coming up quite often where this would be a useful convenience.