I think one of the reasons is that there is no much difference between a variable that addresses a function and any other variable that addresses a value, or vector. Therefore, with that hard scope one would need to declare even all the functions which are being used inside each other function. Of course, this would be impossible.
In Fortran, for a while variables declared with specific names had by default specific types (i as Integer, x as Float), etc. To avoid errors, the implicit none flag was invented, which can be added to a function to guarantee that all variables where declared and no implicit assumptions were made. It might be possible to create some flag of that sort, or a macro, to warn the coder of the of global variables, perhaps.