This is from the IDA Pro book, but even IDA, as good as it is, is still in the end making guesses. The answers here are from "The IDA Pro Book" by Chris Eagle.
- "Why there are not any disassemblers that can generate re-assemblable asm code targeting on benign program (one without obfuscation) ?"
The compilation process is lossy.
At the machine language level there are no variable or function names,
and variable type information can be determined only by how the data is used rather than explicit type declarations. When you observe 32
bits of data being transferred, you’ll need to do some investigative
work to determine whether those 32 bits represent an integer, a 32-bit
floating point value, or a 32-bit pointer.
Compilation is a many-to-many operation.
This means that a source program can be translated to assembly
language in many different ways, and machine language can be
translated back to source in many different ways. As a result, it is
quite common that compiling a file and immediately decompiling it may
yield a vastly different source file from the one that was input.
Decompilers are very language and library dependent. Processing a
binary produced by a Delphi compiler with a decompiler designed to
generate C code can yield very strange results. Similarly, feeding a
compiled Windows binary through a decompiler that has no knowledge of
the Windows programming API may not yield anything useful.
Basically, at this point it still requires human judgment. The best analogy I've heard is that compiling a binary from source is like computing a Hash.
- "If I want to implement such a tool (without the help of IDA Pro, sketching from the beginning), is it possible?"
This sounds to me like an interesting theoretical research question: Can compilation truly be viewed as generating a hash signature? My gut says "Yes." The math would be terribly intricate, and would probably have to be done with a provable language. We typically use hashes because they aren't easy to reverse engineer. However you can still attack hashes using things like rainbow tables, so there's one mega-project to consider. My instinct tells me that rainbow tables on all possible binaries is NP-Complete.
Also consider that determining data types kinda requires human judgment, and we still aren't terribly good at automating THAT kind of intelligence. Is it possible? Maybe. There's a reason why smart people still make tools like IDA.
- "Are there any other concerns related to this that I may have missed?"
I'm new to disassembly, so I'll leave that to the big boys, but hopefully at least I answered the question on why its so difficult to do what you ask.
Eagle, Chris (2011-06-16). The IDA Pro Book: The Unofficial Guide to the World's Most Popular Disassembler (Kindle Locations 151-152). No Starch Press. Kindle Edition.