Is it possible to read a program off the Atmega 16

Everything you can read off an AVR will be compiled machine code, so the best you will get is Assembler. Working out how this translates back into C/library calls will be hell.

Rewrite it better!