The short, short version is that the function is working this way:
Begin-function (first instance):
Begin-loop:
Loop...
Begin-func-again?
Begin-function (second instance):
Begin-loop:
Loop...
Begin-func-again?
Begin-function (third instance):
Begin-loop:
Loop...
Begin-func-again? (NO)
// termination point reached
End-loop
End-function (third instance)
End-loop (from second instance)
End-function (second instance)
End-loop (from first instance)
End-function(first instance)
It isn't that there are multiple versions of the function being created simultaneously, they are an expansion and contraction done in order, but they all do stem from the original function call.