関数が最後まで実行される(または return に達する)と、その関数のコンテキストがスタックから外れ、制御は呼び出し元の続きに戻ります。たとえば a が b を、b が c を呼んでいるなら、c が終わって b の c(); の次に戻り、b が終わって a に戻り、最後にスクリプト本体まで戻ります。戻る順は積んだ順の逆です。

return のたびにスタックの一番上が外れ、積んだ順の逆に戻る

関数を呼んだ行の後ろは、呼ばれた側が終わるまで実行されません。同期のコードが「上から順に実行される」ように見えるのは、この待ち合わせがあるからです。