How to reset micros() to start/zero ?

Even in cases of overflows, endtime-startime will always be the correct elapsed duration, as long as the types of endtime and starttime match the the type returned by your counter, which means unsigned long for millis() and micros().

A correction... The variable types do not have to match the type returned by the function. Any variables used must be unsigned and should all be the same type.

For example, this works for ranges up to 255 milliseconds...

unsigned char Previous;
unsigned char Current;

void setup( void )
{
  Previous = millis();
}

void loop( void )
{
  Current = millis();

  if ( Current - Previous >= 100 )
  {
    // This runs every 100 milliseconds
    Previous = Current;
  }
}