delay() and delayMicroseconds() not working properly

There is an internal function named init() which is used to set up the timers for (among other things) the timing functions. It is called immediately before setup().

Rename your init() function to something else and that should fix the problem.