I mean, we could totally have done that. There's nothing stopping you from delivering an experience like modern Amazon or Facebook or whatever in server-rendered HTML4. CSS3 and React get you fancy graphics and animations, and fast, no-repaint page transitions, but that's pretty much all they get you; we had everything else 25 years ago in MSIE6.
You could have built a dynamically-computed product listing grid + shopping cart, or a dynamically-computed network-propagated news feed with multimedia post types + attached comment threads (save for video, which would have been impractical back then), on top of Perl CGI-bin scripts — or if you liked, a custom Apache module in C.
And, in fact, some people did! There existed web services even in 1998 that did [various fragments of] these things! Most of them built in ASP or ColdFusion, mind you, and so limited to a very specific stack; but still, it was happening!
It was just that the results were all incredibly jank, with no UX polish... but not because UX polish would have been impossible with the tools available at the time. (As I said, HTML4 was quite capable!)
Rather, it was because all the professional HCI people were still mostly focused on native apps (with the few rare corporate UX vanguards "doing web stuff", working on siloed enterprise products like the MSDN docs); while the new and growing body of art-school "web design" types were all instead being trained mainly on the application of vertically-integrated design tools (ActiveX, Flash, maybe web layout via Photoshop 9-way slice export).