Why can't I reverse a hash to a possible input?
Actually, depending on the individual hash and explicitly ignoring all computational feasibility issues, you could. Just don’t expect the result of your reversal to be the same as the “original input”.
Furthermore you should be aware of the fact that, depending on the type of hash and depending on the cryptographical security of its design, reversing the hash function might be as unfeasible and/or unpractical as a brute-force attack.
Keeping that in mind and looking at the fact that it is well known that “one should not hash secrets”, your hash-reversal will not do any magic like cracking passwords. That is, unless someone really messed up application and/or website security and (for whatever reason) ignored well vetted recommendations like the ones that you can find at the OWASP Password Storage Cheat Sheet.
What have I gotten wrong here?
Not much… well, except that – as I already indicated – it seems as if you forgot (or simply ignored) that 99.9% of all hash functions out there include a compression step, which loses information and therefore can not be reversed (unless someone messed up the hash function design really badly). That prevents reconstructing the original input. As said: all you might be able to get is “some possible input, which is bound to differ from the original input”.
As an example: MD5’s compression function can be reduced to 45 steps using a meet-in-the-middle attack taking only $2^{100}$ function evaluations [1], but that won’t help reproducing the majority of potentially original inputs. (Though, it might help on the way to create pre-images.)
Practically, your attempts will be limited to finding “could have been” inputs (read: some possible input) not larger than the hash output size, but there is no way to prove that those were indeed the original inputs, nor is it safe to assume so as there is no upper bound on a hash input. So, in the end, your “proof” boils down to the discovery that – if you are able to reverse the whole hash function – it is possible to find inputs which produce some expected output when applying the hash function. That’s neither magic, nor a real breakthrough… rather the result of simple logic… somewhat like a hard way to create a one-to-one mapping by working your way back through a hash function (which is build to make that aspect hard).
Wrapping it up: your “proof” only makes sense and applies to inputs not larger than the output of the related hash function – think: pre-image attack. Since cryptographically secure hashes (the ones we tend to handle at Crypto.SE) are build to provide preimage-resistance, it raises the question if your approach is feasible enough to be practical – which strongly depends on the individual scenario. Practically, chances are rather low you’ll be shortcutting your way into “secrets”.
On the other hand, you might have some valid reasons making you want to reverse hash strings of whatever data to (for example) be able to fake the input of that whatever data. In the end, it is up to you to decide if you really want to invest the according time and resources on reversing hashes of “non-secrets”. In a worst case, you’ll be spending more time and efforts on it as you would spend on the application of an optimized brute-force attack… of course, depening on the individual scenario and/or the individual hash function involved. (I’m only adding the later since simpler, checksum-alike, non-cryptographically secure hashes exist which might provide the base for more feasible scenarios).
[1] Selected Areas in Cryptography: 15th Annual International Workshop, SAC 2008 – page 121
(expr1 | expr2) & (expr3 | expr4) & (expr5 | expr6) & ... & (expr199 | expr200)
, where expr1 through expr200 are still very complex expressions. Guess which of the 2^200 possible combinations will actually yield an input! $\endgroup$