Boa tarde, Gustavo! No caso das funções em JavaScript elas não precisam ser colocadas em ordem para que sejam chamadas. O JavaScript está executando de cima para baixo normalmente. A diferença é que as funções só são executadas quando são chamadas como na linha 21 e 22. quando você coloca "calculaImc(1.71,73)" você está executando a função, então ela irá atrás dessa função no código, entrar nela e executar o que tem dentro. Se existir uma função sendo executada dentro de outra função ele faz o mesmo processo e assim vai, portanto, a ordem não iria diferenciar mesmo de vc trocasse a posição das funções.
A necessidade da variavel imc estar dentro da função calculaImc é porque ela precisa dos parâmetros altura e peso para realizar o seu cálculo. (Os parâmetros são os valores que você passa na função na hora de executar). No caso de "calculaImc(1.71, 73), a altura seria 1.71 e peso seria 73.
Nesse caso, o document.write está dentro da função pois ela só irá ser executada quando a função mostra() ou pulaLinha() forem chamadas. Se ficasse fora da função, ela iria ser executada toda vez que iniciasse o código. Porém, a intenção aí é executar somente quando essas funções que citei forem executadas.