Many GUI apps have some embedded scripting capability (for extensions, batch processing, etc).
The same could be generalized to use and combine not just one through it's special language, but all of them from outside.
That's e.g. what Apple's OSA dictionaries do enabling you to script GUI apps (if its developers bothered to expose its commands as programmatic APIs).
And if Windows and OSX and Linux devs talked between them, the same commands could work in all platforms for the same app.
You could also use something like a visual pipeline (as in Automator) to combine functions and move results between arbitrary apps (think "GUI pipes"), do the whole scripting from the CLI in some scripting language, send messages to the app (a la Rest), etc.
This is also true for web apps of course -- they're GUI based (e.g. Gmail, Mailchip) but lots have programmatic interfaces, via REST and co.
Of course it is inherent. You need to actively fight it if you want it gone (i.e., if you want GUI scriptability). For shell, you automatically have the scripting capability.
You can't automate clicking buttons nearly as easy as you can munging text streams.