The arduino platform is just like any other tool, you use it to make something that works in less time based on what you have on hand, if you need more power, well there are a few other models with increasing power levels that work using the same code if you don't attack the registers, and if you do attack the registers, then you should be able to read through the new devices data sheet to adapt accordingly,
To make clear there is no line in the sand between what is using the arduino macros and writing avr code, as people learn more in the platform and do things that are not in a library or marco, they will learn more of the AVR side, and use a combination of the 2 to get something that works in an hour or 2, vs the full AVR from scratch which might mean half a day of data sheet digging to figure out why the ADC isn't initializing correctly, or how to properly implement the serial peripheral, rather than spending that time on what you where hoping to accomplish with the micro,
Also the ATmega328 can change a pin state in 1 clock cycle when writing to registers, you end up close to a 4Mhz square wave with a shifted duty cycle by using a while loop,