The main reason why ability to #include a3x-es was added was to move number of built-in functions from compiled binaries (raw .bin interpreters used by the compiler) into precompiled private au3 files. The idea was to extend and use pragmatic directives to "include" needed precompiled files/functions.
To me it never made sense why compiled executable should include all built-in functions even though they were never used by user's code. Considering AutoIt is dllcall capable and also since some time works with all kind of objects either late or early bound, all preconditions for the idea were made.
Really large number of functions can be taken out of the binary stub with no performance hits. Functions like Beep, Mouse..., Reg..., Tcp, Udp, and tens of others which aren't any faster because of being part of the binary code.
Of course that some functions can't be taken out, for example Adlibs or some that do lots of calculation like Pixel-whatever but large number of others are very good candidates.
Anyway, the idea was to do something like this:
#pragma use(socket)
TCPStartup()
;...
...and in case of au3 script which is run by AutoIt.exe TCP functions would be built-in (even not necessary) and in case of compiled executable Aut2Exe would add needed a3x code with functions written for it in simple easily maintainable AutoIt code.
This way the size of compiled executables would really depend just on set used functions plus absolute minimum interpreter needs and wouldn't have burden of unnecessary code.
Pragma directive would be mandatory for code that uses Execute or some other run-string function, but for "normal" code it can even be dropped out because compiler can detect used functions itself.