Почему бы не хранить состояние внутри функции?
Плохо хранить с точки зрения философии функционального программирования. Ведь его смысл - в математичности конструкций.
Функция то у вас чистая, но она не в функциональном стиле. Сравните:const getMaxNumber =  (numbers) => numbers.reduce( (a, b) => (a > b) ? a : b)
P.S.: сейчас читаю книгу по ФП в JS, рекомендую!
В данной реализации функция остается чистой, т.к. никакое состояние вы там не храните.
Но если вы будете хранить состояние в функции, то функция не будет чистой.
Вы не сможете её правильно протестировать, потому что каждый раз вы будете получать разные ответы на одинаковые входящие данные.