Это определенно не необходимое условие для языка. Так уж сложилось, что все языки, которые я могу себе представить, обрабатывают свои области таким образом. Зачем? Возможно, потому, что так было сделано так долго, и это имеет смысл как для компилятора, так и для программиста (подумайте о стеках).
Однако, пока я учился в школе, я провел эксперимент с интерпретированным языком, на котором символы помещались в очередь. Таким образом, самая глобальная область действия вышла за рамки локальных границ. Язык все еще работал и был полностью функциональным. Единственное отличие заключалось в том, что локальные области действия были переопределены глобальными областями действия. Это сводится к тому, чтобы быть осторожнее с именами в более глобальных областях.