The timer0 interrupt code maintains t0_fract, but the micros() function only counts milliseconds plus timer count values, leaving out that fractional milliseconds that have elapsed, and thus producing incorrect results.
(This seems to be the only reason that the original Arduino code maintains both a millisecond count AND an overflow count :-( )