Они созданы для разных целей и с разными системами оптимизации.
Например, чтобы уменьшить «Переполнение стека» (без каламбура), некоторые люди думали о различных идеях вызова функции, чтобы сделать переполнение стека невозможным.
Другим примером является лямбда-исчисление. Не слишком расплывчато, но в лямбде-функции функции могут передавать только один аргумент и возвращать одно значение, и, следовательно, также должны иметь свои собственные соглашения о вызовах.