My perspective is of React as a templating engine for markup that allows you to add behaviour on top as you need. So in a sense, exactly what you've said.
It's good at this because it's all done seamlessly in the same language with hardly any magic or conventions they have invented. It's just javascript. It also has a rendering model that's extremely simple to reason about when updates happen.
You can build something as complicated or as simple as you want with that, of course, but React doesn't care if you do. That's up to you to decide. React can be 'just' a static markup template engine running at build time (my own blog is built this way!), a server-only template engine, little bits of behaviour sprinkled in on the client to isolated parts of the page, all the way up to a full blown client application with an arbitrary level of complexity.
But I prefer Mithril (https://mithril.js.org/), which offers the same immediate-mode advantages (https://news.ycombinator.com/item?id=19746235) without the crazy-complex dependency-tracking reactivity.
I rather liked this comment on React: https://news.ycombinator.com/item?id=38640051
This is solved by React server rendering or RSC, e.g. through Next.
Your visitors will see HTML.
You realise that's just HTML with more steps?
What ? I've certainly not overriden the HTML div, nor the CSS font-weight.