The shell should care about its own structures, and do the expansion, and the console should inform the shell when the user needs an expansion.
OTOH with expansion being done in console handler it also works inside programs started from shell. So if you type "list ?" you can still enter a directory name with tab expansion which you could not if expansion was (only) done by shell itself.