I had a look at the code. It uses card.getFilePos() and extrapolates the time it took to get that far, to the total file size. Seems like a reasonable, low cost way to get an estimate. But of course this kind of estimate can be massively off, if the printed part is not homogenous from top to bottom.
I assume Cura's calculations are quite CPU intensive and not feasible to be repeated on the little 8-bit microcontroller - especially not during printing. Maybe a possible solution is to store Curas calculations as comments in the gcode file - so each layer would include a comment like ;TIME:120 meaning it takes 120 seconds to reach this layer. Then the printer would simply subtract this time from the total time written at the start of the file.