Mira lo que sucede es que JavaScript nos ayuda en este tipo de casos tratando de intuir que es lo que queremos hacer con nuestros datos.
Cuando calculamos el IMC solo realizamos operaciones de multiplicación y división por eso no tuvimos problemas, pero si hubiéramos realizado sumas nuestro resultado hubiera sido una concatenación
Cuando los números que nos da el usuario en realidad son string (como en el caso de que no usemos parseInt), tenemos 2 casos:
Operador de suma (+)
El operador de suma (+) nos sirve en strings para concatenar, pero también en operaciones matemáticas para sumar, entonces cuando tenemos un número como string y lo sumamos a un número que si es número, nos da como resultado una concatenación, por esa doble funcionalidad del operador (+)
Operador de multiplicación (*)
En este caso el operador (*)
solo tiene una función que es la de multiplicar, entonces aquí es donde JavaScript intuye que aunque tengamos un número como string lo que queremos es realizar un operación matemática y nos da como resultado un número. esto aplica también para la división (/).
Mira estos ejemplos:
5 + "5" = 55
5 * "5" = 25
5 + 5 = 10
"10" / 2 = 5
"10" * "10" = 100
"10" + "10" = 1010
10 + 10 = 20