Olá Daniel!
Não é exatamente dessa forma que acontece mas vou tentar abstrair usando Orientação a Objetos ok?
Como não sei se você conhece esse paradigma irei explicar.
Imagine que um objeto é um tipo de elemento que possui suas caracteristicas (atributos) e suas ações (funções);
Por exemplo:
Caneta:
Atributos: Cor, Tamanho;
Funções: escrever(), tirarTampa, colocarTampa(), textContent();
Se quisermos saber a cor da caneta usamos: Caneta.getCor(), se quisermos escrever com ela fazermos Caneta.escrever(); se quisermos saber o que foi escrito usamos o Caneta.textContent();
Reparou que o textContent() acessa um atributo do objeto?
Logo, quando fazemos isso:
tdImc = paciente.querySelector("info-imc");
É como se tivessemos criando um objeto, uma referencia, um link entre tdImc com o seletor info-imc.
Quando fazemos isso:
tdImc.textContent = imc;
Estamos pegando o texto dessa referencia e alterando para o que está dentro de imc.
Logo faz sentido ele atualizar, pois é como um link.
Já quando fazemos isso:
imc_html = paciente.querySelector("info-imc").textContent;
Estamos pegando o atributo e não a referencia.
Logo dentro do imc_html não temos um objeto/um link/uma referencia, temos um texto puro e se mudarmos ele nada irá alterar no seu HTML.
Não sei se ficou confuso. Espero que tenha entendido!
Qualquer coisa me fala viu?
Bons estudos! ^^