Both of those will fail on +h mutenick, +o mutenick, +a mutenick, +q mutenick and about 20 other combinations.
From my experience, -vhoaq mutenick only attempts to remove +v.
As you mentioned, $str() would work, but this is still relying on the server to sort modes for you. Same way I used to do it, btw :)