> I'm not entirely sure why variable expansion works inside double quotes but wildcard expansion doesn’t.
That's because a double-quoted expression is supposed to evaluate to a single word. Wildcard expansion can result in multiple words, but parameter expansion doesn't.
(Except for things like "$@". With bash, the rules always have exceptions.)