На самом деле есть очень похожий опыт у жабы. ... Так вот, даже в таком виде этот подход зачастую подвергается критике (хотя "хорошие" мотивы очевидны). Вы же предлагаете еще более экстремальную штуку. Не, не заработает
Хочу обратить Ваше внимание, что написание этих 20 функций не является самоцелью. Задача может иметь много решений. Грубо говоря, ошибка может быть не только в исходном коде, но и в коде ДНК
В моей практике пока не возникало необходимости в таком уровне вложенности, максимум 2 от силы 3. Хотя, может просто не попадалось соответствующей задачи.
Что касается вызова системных процедур из "моих" функций, то этого можно легко избежать, применяя в таких местах процедуру вместо функции. Результат в этом случае возвращается в параметре. Вообще, для всех системных вызовов я стараюсь делать интерфейс типа "узкое горло". Системные вызовы в прикладных модулях у меня не встречаются.
А что Вы подразумеваете под функциями высшего порядка? Полиномы N-ой степени?