This is not completely true. While it is true the vanilla compiler has a limit on the number of symbols it can handle in a compilation unit (it's 8192 but most are used up by nwscript.nss itself, leaving 1800 or so), this can be dealt with by good code design and the use of ExecuteScript instead of direct function calls. You do not need to have all your scripts include everything and you can break things up and limit the excessive use of constants.
While decoupling and shrinking large god methods into smaller methods is ideal - its not always possible.
It is also very impractical when trying to work with a subrace engine which is already very mature and has alot of linkages already.
So yes - I agree that ExecuteScript is a good work around.
However that work around can adversely affect the design of your code.
Eg: If you need to get variables to the calling script, you will then have to export them as local vars so the calling script can get visibility of them.
My advice is that people use the nwntx compiler, and then just plan their code properly - avoiding god methods and adhering to good design principles.
Using ExecuteScript should be used when intended, not as a work around for a limitation of the compiler.
There can be instances where you just need to use quite alot of include files.
I personally find it reassuring that I will never hit any limit on include files - because I use the nwntx compiler.
Its almost like saying:
​The compiler doesn't allow me to use the number 5, so I pass in 2 and 3 and then add them up, to get 5 - to achieve the same result as using 5 in a functional compiler.
​(Highly exaggerated example.)
It should be noted that large include files do not bloat your ncs files.
When compiling - your ncs files take only the pieces of code that are relevant to them.
So at runtime - there is no difference between using vanilla or nwntx - other than the fact that nwntx compiler can give you more freedom for framework design.