Ola Renan,
Essas dúvidas e complicações no entendimento é bem normal no início! Vamos lá.
Pense como se fosse uma formula matemática, acontece de dentro para fora primeiro.
Assim o "mais externo" é executado somente após resolver tudo dentro dele, e assim por diante. Dessa forma a ordem de execução é
- executa a(sobrenome). O interpretador entra na função, executa o que tem dentro, e retorna nesse ponto o valor
- concatena esse retorno, o tal ""
- junta o valor concatenado ao valor da variavel nome
- com tudo pronto dentro da função mais externa, agora sim, executa b passando os valores prontos para ele
- e por fim, somente após a execução de b, retorna todo esse resultado para quem chamou esse trecho
O interpretador, salvo exceções, ao executar uma função qualquer, ele "aguarda" a execução no exato ponto da chamada, para só assim dar prosseguimento dos demais cálculos do fluxo.
Continue praticando e qualquer dúvida pode contar com a gente novamente!