I think this is what you're trying to do:
Y = (X + information) + X diff Y
(This is kind of golden ratio-ish, imo)
It seems to be self referential which doesn't make it impossible, just maybe impossible.
I think the trick here would be calculating the lower bound of a massive block of text that could be encoded somehow to produce a sort of hash collision.
The program would essentially just read from a big chunk of text, and reconstruct the actual source code.
You'd have a separate program to read the previous text, read your program, and find a collision in your encoding scheme that satisfied your changes and also diffed correctly.
What that encoding algorithm is, I don't know, and I'm not sure it can exist. But if it does, I think you'd have to have to have a pretty big chunk of data to collide to even write a hello world program.
This is a pretty interesting problem, but I bet it can be reduced to a simpler computability/information theory deal. I'll be thinking about this all day.