The Web has evolved rapidly in the last couple decades and the needs and complexities of the experiences we can now build on the Web, and that we must build in order to compete with mobile and desktop applications, are growing.
Over time, organizations and individuals created an incredibly large number of tools and libraries that we can take advantage of.
Some of those never got any popular.
Some of those have seen incredible adoption and usage.
That's the case of React, Vue.js, Angular, Ember, Svelte, Preact, and many more.
Until the early 2000s, browsers didn't have the capabilities they have now. They were a lot less powerful, and building complex applications inside them was not feasible performance-wise, and the tooling was not even something that people thought about.
Frameworks abstract the interaction with the browser and the DOM. Instead of manipulating elements by referencing them in the DOM, we declaratively define and interact with them, at a higher level.
Using a framework is like using the C programming language instead of using the Assembly language to write system programs. It's like using a computer to write a document instead of using a typewriter. It's like having a self-driving car instead of driving the car yourself.
Well, not that far, but you get the idea. Instead of using low-level APIs offered by the browser to manipulate elements, and build hugely complex systems to write an application, you use tools built by very smart people that make our life easier.