何とは言わない天然水飲みたさ

C言語でのreturnは他動詞ではなく自動詞

[0]

では、add3()では第1引数に3を足した値を返すが、これはどうやって呼び出し元に伝えられているのか。
実は、戻り値は呼び出された関数が特定のレジスタ(CPU内の記憶領域)、ここではEAXに格納し、呼び出し元がそのレジスタを参照することで値を得る、という決まりになっているのである[1]

すなわちreturnには本来、単に「関数の呼び出し元アドレスへ戻る」という自動詞的な意味しかなく、値を返すというのは「約束の場所に値を置いておく」という利便性のための追加機能である、と考えると自然である。

おまけ: 誰が(何が)返るのか

[2]である。 (或いは、コードの実行されている行をちょこちょこ走る小人のようなものを想定しても良いだろう。)
プログラマにとって身近なものでは、プログラムカウンタ(x86であればEIP、x64であればRIP)が近いかもしれない。