Significant difference between millis() and micros()

delay() does not use an interrupt, nor does it stop other interrupts, whether they are in quotes or not.

Edit: delay() does depend on the Timer0 interrupt running, so if something is interfering with that, like a very long running ISR or long periods of interrupt-inhibited code, then yes, it can get sketchy.

void delay(unsigned long ms)
{
	uint16_t start = (uint16_t)micros();

	while (ms > 0) {
		if (((uint16_t)micros() - start) >= 1000) {
			ms--;
			start += 1000;
		}
	}
}