It would help if you put each { on a new line, use Tools + Auto Format. How are we supposed to follow code that jumps all over the place like this?
if(tenths_u < 0) {
seconds_u--;
tenths_u = 9;
updateDisplayUnderTen();
}
if (digitalRead(A2) == LOW){ //Button to stop clock - delay it actually
delay(10000);
}
if(tenths_u == 0 && seconds_u == 0 && seconds_t == 0 && minutes_u == 0 && minutes_t == 0) { //time up operation - flashing 00:00
timeUp();
In delaySet(), you have an infinite loop with no way to exit it. countDown() should NOT be called from delaySet(). Instead, where the call to countDown() is should be a break statement. That will exit the infinite loop in delaySet(), allowing delaySet() to end, and control to return to loop.
That is where/when you should call countDown().
The countDown() function contains another infinite loop. There is no way that I can see (admittedly, the code structure makes it hard to see, so I might have missed it) to stop the "timer". There is code to suspend the "timer" for 10 seconds, but it's hard to see where that fits in the while loop.