I assume you haven't set any fuses to stop you reading the program back (if this doesn't sound familiar, then you are almost certainly okay).
For most people, the practical answer is NO.
You can retrieve the result of compilation, which is the binary instructions of your program, and put that into another Arduino chip. That may be enough.
AVR Studio has an application for doing this if you have access to an In-Circuit-Serial Programmer.
What you'll get back is the binary code produced after compiling, assembling, linking and loading. That can be put straight into a 'raw' ATmega.
In general, it is very hard to recover even the assembler, but there may be an AVR dis-assembler. I think the Atmel tools include one.
If you can run a dis-assembler, that will get you back to assembly language, a programmer friendly printed form of the binary.
There will not be any program variables names, just memory location addresses.
It is extremely difficult to get back to anything close to Arduino program from this.
The assembler could be edited and a new program produced if you are familiar with assembler, and this may be enough to solve your problem.
Summary: If you must have an Arduino program, then No.
Further, even if you don't need an Arduino program, unless you really know what you are doing (e.g. everything I wrote above made sense), it's likely quicker to write it again.
HTH
GB