Потому что wrapper постоянно возвращает самого себя.
И единственный способ это остановить -- вызвать wrapper без аргументов, чтобы сработала ветка "if number2 is None". Потому что некрасиво писать chain_sum(90)(5)(None). Красивее всё-таки chain_sum(90)(5)()
Но так его вызвать нельзя: он требует number2. Единственный способ научить wrapper работать как с аргументами так и без аргументов -- это написать def wrapper(number2=None). В этом случае при вызове без аргументов сработает ветка "if number2 is None" и вернётся результат суммирования.
Но лучше так вообще не писать, а почитать про
https://python-course.eu/advanced-python/currying-...