Today I learned about paravirtualization. In PV, the hypervisor expose an API to virtual machine that is similar but not identical to that of the underlaying hardware.
One example, that helped me understand the concept is Spice with Qemu. In full virtualized setups, the VNC server reads frames from video memory and send them to the VNC client through a network connection. However, in the spice context, the spice-server expose an X driver to the guest. The latter captures X protocol operations directly.