We use a very small VDB (buffer that can be 1/10 the size of your display or even less) and alpha blend smaller parts of the screen at a time. This reduces RAM usage. Because of this architecture, LittlevGL can work with all screen types regardless of whether they actually use a framebuffer. The driver on your end merely has to take a buffer of pixels and put them on the screen at a certain location.
The library keeps track of which objects are on screen, and whether or not they are invalidated (need to be redrawn). It only redraws what actually needs to be redrawn.
Not quite. Objects are drawn using high level methods (like lv_draw_rect, lv_draw_triangle, etc) that render using the VDB that I mentioned above.