Instead of doing all operations required to render the gamestate in a single frame you spread them in parts across multiple frames. This means that the output represents the state of the game some number of frames ago, increasing the time between your control inputs and what you see changing on screen.
This kind of pipelining is really about efficiency. Without it, either only the game logic is busy (utilizing just the CPU, most often) or the renderer is busy (utilizing both CPU and GPU). By starting next frames game logic sooner (concurrently with current frames rendering), one can keep a steadier load on both CPU and GPU with less idle time.