Here are the answers:
There is only one description of how the subroutine should perform operations. However, there is one environment to store the values of parameters and local variables for each invocation of the subroutine. This means each invocation can track its own parameters and variables.
An environment in this context is a call frame. Recall that a new call frame is allocated and created for each invocation of any subroutine. This is how Pascal (and most other modern programming languages) can isolate the parameters and local variables of one invocation from another.
Calling recursively is really no different from calling in general. Instead of getting puzzled by the apparent mystery of recursion, one way to deal with recursion is to forget it is recursion! Just remember what the subroutine is supposed to do and what it requires to know (parameters) when you are ready to call it from anywhere. This approach (of focusing on what and not how when you invoke a subroutine) usually helps.