The issue with your time formatting is that you are not reusing your divisions: you should first divide the number of seconds by 60 and floor it to get the minutes. Then you subtract 60minutes to your initial value to get the remaining seconds.
You then do the same for hours: minutes/60, floor to get hours, then minutes - 60hours to get the final number of minutes.
For instance, if your time is 4567 seconds: minutes = floor(4567/60) = 76, and seconds = 4567 - 7660 = 7.
hours = floor(76/60) = 1, and minutes = 76 - 160 = 16.
The time is 1:16:07.
(You can also go the other way around: divide by 3600 to get hours, subtract to get remaining minutes, divide by 60 to get actual minutes, and subtract to get seconds. The first way may be “easier” in that you don’t have to multiply 606024*etc. if you go higher than hours/days.)
As for the error, I think it accumulates every tick, because floating point calculations mean you always get some error.
By always subtracting the current time from the start time, the error will stay the same, and will be insignificant.