Well, you kind of kill it when you say that Norton Commander, Emacs, vi and friends don't count as GUI. At that point, there's hardly anything left that does count as GUI, perhaps just the visual fluff you get from high-resolution (e.g. more than 80x25 and such) displays.
So, let's assume that's exactly what you mean. No fluff.
Why do we get so much fluff? When it first comes, it has a certain novelty aspect. But that wears of rather quickly, and is actually quite discouraging to many users. Just look at all those examples like rounded corners, gloss, transparent windows and similar - you show them off for a generation or two, just to flex your muscles in front of a crowd of fawning fanboys, they get copied all over and used in all the wrong applications, and then the novelty wears off, and the fashion changes. Look at Windows 10 compared to Vista (all that gloss and transparency!), XP (rounded everything!). Windows 9/10 design is simple, clean, unobtrusive; a nice show of what remains when you get rid of the fluff.
So why do the graphics remain, rather than going back to text interfaces? The answer is actually quite simple - it makes a lot of complicated problems easier. Mind you, I'm not saying it's a panacea. It isn't. Text interfaces still have plenty of benefits:
- Friendlier for remote terminals
- Easier human auditing, with easy logging of everything that happens at the terminal
- Easier showing of history in general
- Easier composition of text-only applications (though this fades when any sort of "GUI" enters the equation, even in text-mode)
Now, of course, graphics had a head-start in applications that were, well, graphical. Computer-aided design. Publishing. It's not really a long list. Even today, some people can't stomach using a graphical interface for things as complicated as DTP - at best, they have a graphical window into what the layout is going to look like on paper (or what have you), while they do the actual editing in something like TeX, or even MarkDown or (gasp!) HTML.
Why did graphics win on the desktop in general? As noted before, text-mode applications still had great "GUIs", you still had full-blown integrated environments with all the cool things true GUIs give you, like keyboard shortcuts, menus, mouse control, hinting, all the nice discoverability.
Exactly because of those advanced users that everyone here is calling to the rescue. Why? Because there was no compatibility anywhere. Everyone did text-based applications their way. Even attempts at standardisation like POSIX, or even MS-DOS (which was designed to be quite a bit different than it actually turned out, mostly for - guess what - compatibility with IBM DOS, which got released slightly earlier) mostly failed. Even at the IBM PC (and its clones), where Microsoft quickly gained dominance, every application had its own idea about what commands should be named, what actions should do what, how to format their input and output data. Nobody tried to make common interfaces, formats. There was just endless arguments about who was better. There was no end in sight.
And then Xerox came with their revolutionary PARC. Now, mind you, this was tons of things that were utterly impractical when the research teams actually designed them. There were no computers powerful enough to run their systems, while also being anything close to affordable by any family, or really even corporations. But computers got powerful quickly, and everyone went to the well. Atari, Amiga, Apple, Microsoft - everyone adopted the same basic paradigms. Everyone also added some of their own, but those were also quickly spread in the new world - a world of inter-operation and compatibility. In no small part because the ones who cared about compatibility started winning. MS-DOS wasn't the best OS, not by far. Unless you cared about the fact that it run pretty much everything. You could take your applications from Dr-DOS, IBM DOS, and a few dozen other Something-DOSes and OSes, and run them on MS-DOS. Which OS do you buy? The one that has you locked-in to a couple of software packages, or the one that gives you pretty much all of them? Which OS do you design software for?
Windows weren't the first graphical OS, but that didn't matter anymore. The drive for compatibility was already there, and in full blow. Use a mouse to point at a button, press the mouse button, action happens. Every application on every system behaved the same. You had windows, you had buttons, you had scrollbars and menus - and there was a lot of pressure to unify their behaviour as much as reasonable, while still appearing somewhat different. And even when platforms differed (slightly), two applications on the same platform never did - something Linux still struggles with to this very day, with the misguided idea that it's the application, that should pick the GUI, rather than the user. What did "advanced" users do? They utterly and entirely ignored it, happy with their proprietary (funny, eh? :)) and incompatible CLIs. Advanced users are a lot more invested in their platform, simply because the invested so much time an effort in becoming proficient in that one platform. Advanced users are the bane of progress.
So the solution isn't to make everyone an advanced user, quite the opposite. Expect no effort from your users. Start with environments that try to standardise their interfaces - use the same keyboard shortcuts, naming conventions, formats. Think about accessibility, not just efficiency. Sure,
ls is fine if you have a horrible keyboard or you can't type very well - but
list is a hell of a lot more accessible. Use aliases if you need to, but even those should be conforming with other systems - you're not going to keep carrying your aliases over to other computers you need to use; just stick to defaults. Kick out anyone who doesn't play nice. Get rid of the hipsters, who not only can't recognise progress - they sneer at the very idea of progress.
A nice, compatible and mostly standardised interface will give you the inertia you need. Applications like Norton Commander, not command-line
ls. Applications like Turbo Pascal, not vi. Search by wildcard, not regular expressions (but feel free to keep the advanced option!). Sort "by human", not "by computer" -
Folder 100 should never end up in sort order between
Folder 2 and
Folder, deal with it. Learn everything the graphical OSes did right, and use it too. Don't consider remote terminals too much, even smart terminals - you'd never get a real interactive applications there - bandwidth is less of an issue than in a graphical application, but latency is just as horrible; in some cases even more so. Standardise rich terminals, streaming-text-only isn't good enough by far, and neither is just text positioning on a fixed background. Make it real smart, like what true GUIs managed to do.
Keep focus on freely integrated systems, rather than large proprietary bags of tricks (and no, keeping it "FSF" or "OSS" doesn't make it any less of a "large proprietary bag of tricks"). Have developers all over the world coöperate on what they're doing, rather than competing purely out of spite and other misguided initiatives. Find ways to engage users, improve their productivity, instead of arbitrarily introducing differences just to make conversion harder. Instead of ten competing packages "of everything", modularize - give users easy way to make choices without making things appear too complex. Remember how Turbo Pascal, despite being an IDE, actually allowed you to plug-in a custom linker, compiler, debugger...? Encourage that model. The company that's great at writing compilers isn't necessarily the best at linkers. Introduce productivity and discoverability features like auto-completion that mostly had to wait for GUIs in our history.
Does that leave us with all the problems solved? Almost. There are still things that graphics just does better. Layouting is much easier with higher resolution, resolution-agnostic design is much easier with higher resolution. Allow improvements over the text-mode ideal - for example, allow combining multiple "tile" sizes on one screen, so that you can e.g. have text written "as-if-in-80x25", while allowing other elements to be "as-if-in-80-40". Allow graphical elements to be included in a text-mode application - so that you don't have to keep changing the whole screen just to have a WYSIWYG look at your document, or to show graphs inside of a spreadsheet.
This is the truly complicated part - at some point, it becomes harder to justify that having two ways of doing fundamentally the same thing is a good thing; why have "hybrid" rendering on a Haswell machine, when you can render everything in graphics mode just as quickly, while keeping things simpler and prettier? Use accessories that can exploit extremely cheap low-resolution displays to keep better track of your whole system - or even give you cool graphical "pretend" interface in a similar way those Nintendo Mini-arcades had, without giving up on the benefits of text-mode?