Uno millis() falls behind over long periods (hours/days)

Not true, even a cheap RTC module is more accurate than a genuine arduino. My cheap DS3231 china clones are very accurate after aging calibration. I've just checked one of my modules and it is off by less than 500ms over a period of 9 weeks.