Going backwards in the compilation process will always be very hard to comprehend. The best I’ve been able to make of it is to use the output of a decompiler as a guide to write new code that’s supposed to do what the old executable does.
Having analyzed the source code for multiple Infocom games (including different versions for a game), it is difficult but not impossible to create the original ZIL code. I don’t know how I’d create a program to automate it but you could do it by hand. As others have said, you will not variables names or address that have any meaning.
You can create ZIL code which compiles to the same thing, but I don’t think you can be certain that it’s the same source code. Even aside from symbol names, you could have different code structures which compile to the same thing.
True, you can’t be sure it is exactly the same code. However, there are several examples of released Infocom ZIL source code which could form the basis of your own code that compiles to the same Z-code.
But I’m not sure how much its worth spending that much time doing it.