Вставлю свои две копейки.
1. Указатель на функцию и функция - сильно разные вещи в императивных языках обычно. Указателя на функцию в языке может и не быть, а функции - по-любому присутствуют.
В Паскале указателей на функцию нет, а есть процедурный тип. Его реализация под капотом, скорее всего - тоже указатель, но ведь в самом языке его нет!
Путаница ИМХО пошла с Си, поскольку там было правило: имя функции = константа-указатель на функцию (того же типа).
2. ИМХО функции высших порядков лучше всего смотреть в Лиспе. Там список и функция - близнецы-братья.
Возвращаемый список может быть функцией (списком) сформированным во время работы программы. И тут же во время работы программы эту функцию можно выполнить.
В императивном языке вроде Си нельзя во время программы сформировать функцию на Си и тут же ее выполнить. Как минимум потребуется вызов компилятора.
Вот БлэкБокс (не Компонентный паскаль!) такое вроде позволяет...