. value ist eigentlich ein attribut und deine output elemente haben keine (bzw. bringt es wenig für die darstellung ihnen solche attribute zu zuweisen, es ist besser ihnen einen inhalt zu geben und der ist eben zwischen den tags) und die inputfelder kein innerHTML, weil sie eigentlich inhaltsleer sind, also nur aus einem tag bestehen, aber sie haben halt das attribut value...
Ich glaube damit hast Du den Nagel auf den Kopf getroffen und daher rührte mein ganzes Problem. In den meisten Beispielen im Internet, die "merkwürdigerweise" alle funktionieren, werden auch für die Ausgabe input Felder verwendet. Allein aufgrund der Bezeichnung erschien es mir jedoch logischer, zur Ausgabe output Elemente zu verwenden. Doch dieses Verhalten habe ich nicht erahnt. Es war ja so, ob mit oder ohne Funktionen.
Ich lernte einst Fortran 77.... die Umstellung auf objektbasierte Sprachen war schwer genug. All das ist nun Jahrzehnte her :) Doch dieses Javascript und html. Eieiei... früher gab es wenigstens eine eindeutige Syntax.