You seem to still hanging on to the idea that your code can keep most of his structure
and just to a small modification to make the display updating the values.
This seems to block your thinking. Just like delay() blocks code-execution.
The function delay() should have been named
freeze_micrcontroller_completely_STOP_executing_all_code_until_freezingtime_is_over()
The way to do the opposite of "freezing the display" which is
the way of keeping the display active and responsive is:
avoid each and every while-loop
by letting do void loop() all the looping.
avoid each and every delay() by
replacing
all the delay()'s with non-blocking timing based on function millis()
From this you can see your code needs re-structuring
for making the code non-blocking = responsive
Your thinking about code-execution must change from linear top to down
1.
2.
3.
...
to a high-frequent looping with timely conditional execution of parts of your code
Here is a tutorial that is intended to explain this concept
From your description it is still not clear to me how you switch on / off the peltier-element.
Can you please draw a timing-chart where the pattern how you want to switch on / off the peltier-element is shown.
If there are additional conditions describe these conditions too.
best regards Stefan