Accuracy of Arduino delay() command

I believe delay() has 1ms jitter as it just waits for millis() to increase by the appropriate value.

delayMicroseconds() is good but disables interrupts...

Suggest you compromise between the two and have a loop waiting for micros() to increase - jitter/granularity will be poorer than delayMicroseconds() but doesn't stop interrupts.

long target = micros() + delay_in_us ;
while (micros () < target) {}