Do you modify .j, .w3a, .w3i etc. directly? Most do not or only via WE. But the .j for example is a compilation of .wtg and .wct together with some other information in WE terms. And this is what technologies like wurst like to do as well: separate the source from the output. If you understand the language of the source and can trust the compiler, you only need to consider the source and maybe it would not be required to upload the outcome at all if the target platform has an interpreter/JIT compiler or the final synthesis without the intermediary parts could be enough.
Having said that, it is not like the existing middleware would be perfect or entire at this point in time and I find myself still often looking at the generated, low-level output, re-analyzing what I have fabricated or also maps of others. This is why, looking at my wc3libs library, it raised the question/idea of putting thin layers onto the wc3 formats like JSON or XML to have it as readable and easily-adjustable text.
edit: Or better yet, a more sophisticated approach: Depending on the type of data, picking different representations may be preferable. I do not assume looking at a W3E tiles as a list of nodes with numbers for each attribute really makes sense as its semantics is a matrix and e.g. the tile height follows a metric -> you may want to identify the differences and compare it. It could be presented by multiple (loss-less) pictures as
@Dr Super Good did before, or as one picture with multiple layers/channels, or as ASCII art. Aside from the last option, this would call for a custom difference-check tool of course but this should still be feasible. Maybe the header of W3E should be extracted completely, you can reorganize its tile matrix with .wpm, .shd etc. We just need to think and make a standard what would be an appropriate representation of a wc3 map.
Now, wc3 maps may consist of a lot of files. You may think the ones listed in
W3M and W3X Files Format were sufficient but those are mostly but to introduce the different formats. There are many more slks, each with their own semantics, you can overwrite scripts/common.j or the layout files (.fdf) (for the game, not in map though), .txt files like the profile in Units\ or the gameplay constants and interface stuff with basically arbitrary fields. The raw resources (overshadowed/new) without special meaning should go to a distinctive scope. But there is a lot of inbuilt interface media like you have custom UI bars. I found it always very inconvenient having to precisely know the (partly cryptic) paths or keys that must be overwritten for the desired effect, so I think collecting that intelligence and providing something better for them would be keen, too. Or maybe an UI designer tool with preview?
The main problem would be to model dependencies. Like the .w3i (map and player information) is relatively autonomous but the .doo (object placements) files contain spatial (in reference to W3E coordinates) but also non-spatial widget data. Gathering everything in one file would kill readability and be wasteful, distributing it means the necessity of linkages and consistency contemplations. The UI stuff mentioned before is usually a singular, non-interweaved task. You won't dynamically change the day/night indicator based on the amount of your jass variables. Thus it is practical to have UI modifications as standalone. You may however want to alter your the map script leveraging object placements like a unit placement definition is converted to a 'call CreateUnit(...)' line. The WE does this as well. That specific scenario could perhaps be abstracted because it is a standard mechanism but custom and a number of the hacky ways we use in wc3 mapmaking like exporting selected object editor data to the map script would be different. Nah, we cannot account for everything, better if this intermediate representation is still fairly directly modeling the wc3 possibilities and explicit.
The first step should always be to eliminate the pure boilerplate. You could also have multiple interstages, build yourself a delivery chain. The first repository has the source code, from that you translate to the first intermediate representation, from that to the second, ..., always descending on a lower level until you reach some sink(s). You can even fork it off, enabling different paths, adding an endpoint here or there to add/extract required information, recurrency. Go wc3 DevOps.