Because the standard says so. But that isn't very helpful; the reason why this isn't allowed by the standard, is that all file scope variables must be initialized before main() is called. This in turn means that they must consist of compile-time constants only.
The purpose of a VLA is to grab the size in run-time. We can't have an array where the size is determined both at compile-time and run-time. If you have need for a variable size array at file scope, use a pointer and then in run-time have it point to an allocated array, such as for example an array allocated with malloc().