I'm not sure I understand the problem. The first example builds fine for me. So far as I can work out the object code looks about the way I would expect. I guess it does not do what you expect -- is that it? What actually happens to reset_counter across resets?
Disassembly of section .text.setup:
00000000 <setup>:
0: 80 91 00 00 lds r24, 0x0000
2: R_AVR_16 .noinit
4: 8f 5f subi r24, 0xFF ; 255
6: 80 93 00 00 sts 0x0000, r24
8: R_AVR_16 .noinit
a: 08 95 ret
Disassembly of section .text.loop:
00000000 <loop>:
0: 08 95 ret
Disassembly of section .noinit:
00000000 <reset_counter>:
...
the ELF output looks about what I would expect:
Disassembly of section .bss:
00800200 <__bss_start>:
800200: 00 00 nop
...
00800204 <timer0_millis>:
800204: 00 00 nop
...
00800208 <timer0_fract>:
...
Disassembly of section .noinit:
00800209 <reset_counter>:
...
:
:
0000012c <setup>:
12c: 80 91 09 02 lds r24, 0x0209
130: 8f 5f subi r24, 0xFF ; 255
132: 80 93 09 02 sts 0x0209, r24
136: 08 95 ret