Thanks for invites to answer this question. For now I will just give a very short answer since the full one is very big. I am going to finish my article on Medium about Vanilla JS architecture in some weeks where I am going to explain a lot.
JavaScript is a scripting language - general Browser's API, it never was a full serious programming language and it shouldn't be. JS was invented to do a simple job - add dynamics to browser and allow not even an engineerers, but designers, just coders to "talk to browser". A bit later JS become a standard known as ECMA and most of the JS engines are written in C/C++/Java. In simple words - JavaScript itself already is a framework and JavaScript (ES6 with Web APIs) today is a very powerful browser's framework.
On the other hand, real programming languages exists for general purpose and give you access to OS, processes, I/O and etc. They by default do not provide you any tools. If you need to parse a string which is HTML and build a DOM, you need to write your own solution (or to include a package which was anyway written by someone previously). In JavaScript you already have many of these packages included globally by default and you don't need to implement them yourself, you have access to client's window, document, images, links and many other stuff. Today there are a lot of modern Web APIs which allows you to send push notification, get acccess to microphone, camera, you can draw 3D games in canvas and do a lot of cool things. For example, most of JS users (developers) don't know basic algorithms in computer graphics, higher mathematics, data structures and a lot of other topics from Computer Science. That's why JS become so popular - because it is very simple and gives you a lot of built-in tools.
The reason why frameworks are needed in real programming languages and especially on back-end is, simply, because it's not the language's job to give you APIs.
That's why JS frameworks are useless. Moreover, they just add extra abstraction and increase the code you should transfer to user from the server and in mobile age of the slow Internet, it is crticial. Why do I need to include a 50-500kb of JS which doesn't do anything? I can include a stand-alone library which will do a form validation, for example, and only for cost of 5kb. I can include another library and write a bit of custom codebase. At the end I may have full codebase which does a lot and still is much smaller then a framework which doesn't do anything.
The reason why UNIX is so popular - because it is simple set of many small components, small programs, where each one is doing it small job and they all do not depend on each other. You probably have been using many of them in last week. Here is just a very small example of common ones: ls, cd, mkdir, rmdir, mv, cp, top, kill, man, ssh.
So yes, you can go very far with modern Vanilla JS and build complicated modern apps.
Finally at the end I want to remind every software engineer one of the core principles in software engineering which is also applied everywhere in the life - KISS (Keep it simple, stupid)
“Perfection is achieved not when there is nothing left to add, but when there is nothing left to take away” – Antoine de Saint-Exupery
Mev-Rael
Executive Product Leader & Mentor for High-End Influencers and Brands @ mevrael.com