What I didn't say is it's only of benefit if you specifically have a use for it. I don't. Thinking about it, though, I can understand how much better it would be for someone that has a need for it.
I think I mainly posted because xx3nvyxx's solution seemed overcomplicated, as does yours. Here is my crack at it:
Code:
Glob(list, "C:\Program Files\?u*y\*\*.exe")
MsgBox %list%
Glob(ByRef list, Pattern, IncludeDirs=0)
{
if (i:=RegExMatch(Pattern,"[*?]")) && (i:=InStr(Pattern,"",1,i+1))
Loop, % SubStr(Pattern, 1, i-1), 2
Glob(list, A_LoopFileLongPath . SubStr(Pattern,i), IncludeDirs)
else
Loop, %Pattern%, %IncludeDirs%
list .= (list="" ? "" : "`n") . A_LoopFileLongPath
}
It seems too simple... maybe I missed something?

Thanks Lexikos, I needed this today.