Unspendable keys in descriptors

That sounds good to me; in the context of wallet policies, it just means “sorting the vector of keys” (and dropping key origins), then concatenating the compressed pubkeys, then hashing.

In descriptors, it would need to be decided what to do (or if _ is supported at all) when there are key expressions that are not xpubs.

This restriction doesn’t quite make sense in the context of wallet policies: it is desired (and expected) that people would use the same xpub in the descriptor with different ‘endings’ for different spending paths (e.g. xpub/<0;1>/* for one spending path, xpub/<2;3>/* for another, etc.). Note that those would indeed be a single xpub in the wallet policy. This is in fact the reason wallet policies keep the /<m;n>/* in the descriptor template rather than the key information vector.

Vendors/wallets, of course, can decide to support a subset of valid descriptors/policies if they want additional properties that the general class of descriptors doesn’t or can’t satisfy.