nonlocal предназначено для доступа и модификации переменных из ближайшей неглобальной области видимости, окружающей текущую функцию. Глобальная область видимости по определению является самой внешней, и нет "объемлющей" неглобальной области видимости, в которой бы переменная существовала для модификации через nonlocal.  Использование global предназначено для работы с глобальными переменными.
Оператор nonlocal в Python предназначен для работы с переменными, которые находятся в замкнутых (enclosing) областях видимости, но не являются локальными для текущей функции и не являются глобальными.
Причина, по которой nonlocal не работает с глобальными переменными, кроется в самой идее его предназначения. nonlocal  создан для того, чтобы позволить функции изменять переменные во внешней (замкнутой), но все еще не глобальной области видимости. Это необходимо, когда вы имеете вложенные функции, и внутренняя функция хочет изменить переменную, определенную во внешней функции, но при этом не создает локальную переменную с тем же именем.
Глобальные переменные уже имеют прямой доступ и могут быть изменены напрямую внутри любой функции с использованием ключевого слова global. Использование global явно указывает, что мы намереваемся работать с переменной, определенной в глобальной области видимости.  nonlocal предназначен для другого сценария - для случаев, когда переменная находится "между" локальной и глобальной областями видимости.
Если бы nonlocal работал с глобальными переменными, это создавало бы путаницу и дублирование функциональности с global.  Более того, это могло бы привести к непредсказуемому поведению, так как было бы неясно, должно ли изменение, сделанное с помощью nonlocal, быть связано с глобальной переменной напрямую или с переменной во внешней области видимости (если она существует).
В итоге, разделение global и nonlocal делает код более явным, понятным и позволяет избежать конфликтов и неоднозначностей при работе с переменными в различных областях видимости.
Пример:
        
def outer_function():
    x = 10
    def inner_function():
        nonlocal x  # Корректно: x находится в замкнутой области видимости outer_function
        x = 20
        print("inner:", x)
    inner_function()
    print("outer:", x)
outer_function()
# А вот это вызовет ошибку:
# global_var = 5
# def my_function():
#     nonlocal global_var # SyntaxError: no binding for nonlocal 'global_var' found
#     global_var = 10
# my_function()
global_var = 5
def my_function():
    global global_var
    global_var = 10
my_function()
print(global_var) # Output: 10