I don't think even Tony will yell at you for this

IIRC, you can introduce your own attributes into *1 files, but empeg SW will not do anything with them (I think I learned that by making a typo somewhere, and it appeared in DB export; I am not sure, it was long ago). One of the problems with your wishlist (and I will not even touch mixing) is space and time needed to build empeg database from *1 files - we are already near the edge of usability for very large music collections. Further, simple probability-based mixing already there (in two different mechanisms - 'take x% from this playlist' and user-defined searches like 'top 40' or 'not played recently' (I could'n quickly find about the later in the FAQ, but it was discussed in
this thread)) won't do for your 'rigidity' requirement: you don't want Swingle Singers in your 90% heavy metal list. You need particular attributes to be ranges of values, and list-building criteria to specify how far on each scale (and with what probability) one can go.
I am affraid there is little hope to implement your wishes in the current incarnation of empeg. The only way to achieve the desired functionality are clever playlists.
However, why not think a bit about
generating such playlists automagically (either off-line or, even better, on the player itself; perhaps jEmplode could be a good place, with its soup handling). One of problems to solve would be where to keep additional attributes - IIRC, (j)Emplode communicates attributes with empeg in the terms of database, not individual files, so, say, adding another set of *2 files content of which does not go to the database does not seem to be an option.... Argh, I have forgotten so much about my toy's internals!

Anyway, interesting things to think a bit about.