Why does AVR code use bit shifting
The simplest code ends up being a mess of bit-shifts. Why are bits defined as bit positions instead of masks.


No. Not at all. The shifts are only in the C source code, not in the compiled machine code. All the examples you showed can and will be resolved by the compiler at compile time because they are simple constant expressions. 

(1&lt;&lt;PB4) is just a way to say "bit PB4". 


So it not only works, it does not create more code size.
It makes also sense for the human programmer to name the bits by their index (e.g. 5) and not by their bit mask (e.g. 32) because this way consecutive numbers 0..7 can be used to identify the bits instead of awkward power of two (1, 2, 4, 8, .. 128). 
And there is another reason (maybe the main reason):
The C-header files can not only be used for C-code but also for assembler source code (or assembler code inlined in C source code).
In AVR assembler code you definitely not only want to use bit masks (which can be created from indices by bit shifting). For some AVR bit manipulation assembler instructions (e.g. SBI, CBI, BST, BLD) you have to use bit indices as immediate operator in their instruction op code.
Only if you identify bits of SFRs by indices (not by bit mask) you can use such identifiers directly as the assembler instructions immediate operand. Otherwise you had to have two definitions for each SFR bit: one defining its bit index (which can be used e.g. as operand in aforementioned bit manipulating assembler instructions) and one defining its bit mask (which can only be used for instructions where the whole byte is manipulated).