в ассемблере нет функций и возвращают результат процедуры. ну и процедуры в любом языке где есть функции тоже могут возвращать результат, все зависит от того каким образом вы передаете переменную, самый простой способ передавать указатель, ну а к примеру в паскаль можно перед переменной поставить var и тогда все вернется в этой переменной. отличия функции от переменной всего лишь в том что функцию можно использовать с операторами типа а = в + фунеция(а) + с;.
Тут можно поспорить, в своё время когда он только появился он предоставлял такой функционал который до него никто ещё никогда не реализовывал, в своё время когда он вышел это считалось чудом программирования и прорывом в программировании, однако время идёт и сейчас с новыми технологиями "построить" свой собственный компилятор и свой собственный ЯП для него ещё никогда не было такой простой задачей как сейчас, это неизбежно, технологии развиваются, в "научных кругах" им практически не пользуются, как правило если нужно провести какие-нибудь исследования или например испытать какую-нибудь сложную аппаратуру(ракету например) в какой-нибудь институте то для этого будут создаваться новые языки программирования и программная начинка.