I mean, you can obviously just draw to your own in-memory framebuffer that you never erase and then copy that to the physical backbuffer every frame. But there's no point in doing it that way when you can easily afford to re-render everything.
Having a limited budget of how much of the screen you can update in 17ms made for fun programming challenges, as did other limitations of the old hardware. Game developers came up with ingenious ways to leverage the hardware and make it seem like it could do more than it actually could.
Scanline-accurate switching of video attributes while wasting no clock cycles doing everything else and without a timer. That kind of stuff.
Programming to artificial self-imposed limits is not the same.