Someone on HN recommended it to me before, so I’ll just pass this along: look at intercooler JS for making individual “live widgets” on a well-designed graceful degradation site like you describe.
Also Alpine.js, which has got quite a community behind it (somehow promoted by Laravel, IIRC).
It is less than intercooler, but provides timesavers for simple sites like described. A compromise between a framework and none.