The problem is that making the abstractions perfect (and arduino's are not, probably for this reason) can take a LOT of code.
These Atmel chips are pretty tiny and memory constrained compared to what you might be used to. And that is not even to mention the performance overhead these abstractions can incur.
Sometimes you also run into fundamental impedance mismatch issues. Situations where you can't present a high level interface to something without having to make unacceptable compromises.
All in all, while arduino is convenient for a beginner to get started, the second the beginner starts to get serious about hardware development is the second the issues begin appearing.
You can get quite far with arduino but if you want to use a device like the ATTiny85 to its full potential, you're going to struggle.
While it is true that the digitalWrite Arduino functions are easier to read I think with a bit of effort and having the datasheet by your side (you are programming hardware!) you can get the hang of it pretty quickly. Without the scary bit operators the code above is not that difficult:
#include <avr/io.h>
#include <util/delay.h>
int main() {
DDRB = 0b00000001; // DB0 is an output
setup();
for(;;) {
PORTB = 0b00000001; // on
_delay_ms(500);
PORTB = 0b00000000; // off
_delay_ms(500);
}
}