"Why is Dec() function used here? Looks like it should be part of some type of loop"
Well, you probably concluded that this is a count down.
The timer should (probably) fire every 1 seconds.
"start" may begin with 60 (or any value). So the countdown will finish after that many seconds.
And well yes, you could do
for start := 60 downto 0 do begin
// do the countdown
sleep(1000);
end;
But the loop would mean that your app becomes blocked/unresponsive. The OS may even warn, that your app in not responsive.
Many people still use the loop, and insert "Application.ProcessMessages". That does work. But has it's own drawbacks. For example the time spent in "Application.ProcessMessages" is added to the time waited in "sleep(1000)", and so your loop runs slower than expected.
In modern GUI programming such tasks are solved by an event based implementation. The timer provides the event. And in-between the app runs all normal.
Note, that timers are not a 100% guarantee that there will be never any lag (extra time) added to the cycle. Nor do they necessary happen exactly at the millisecond intended. For a countdown that does not matter. For playing an animation, or frames of a movie, you may need to take extra steps.