It's not allowed because unless it is restricted to the extreme, it could be exceptionally error prone. Consider this:
extern const int sz; // Another TU
int a[sz];
The size of the array depends on the initialization order between it and sz
(which in our example is in another transnational unit). It could produce a 0 sized array (ill-formed). The correctness of programs being built should not depend on such things.
So if we limit its size to variables in the current TU only, we end up with:
const int sz = 10;
int a[sz];
But why use a VLA at all in this case? Just specify the size with the constant expression 10.
It's just not a useful feature. Not to mention, as @M.M pointed out, that it goes against the design goal of easily allowing static data to be pre-built into the binary.