Фактически, все крутится вокруг простой идеи - разделение классов передачи управления. Для компилера и проца - вызов функции - он и есть вызов. А для логики задачи вызовы разные бывают. Одно дело - sin(x) вызвал, а другое дело - переход в другое состояние машины состояний.