It calls your display callback over and over,
calling idle between so that it can maintain a specific framerate if possible,
and others if necessary (such as if you resize the window or trigger an input event).
Essentially, within this function is the main program loop, where GLUT does most of the work for you and allows you to simply set up the specific program logic in these callbacks.
In your display callback should obviously be your main logic to draw whatever it is that should be going on.
In the idle callback should be some very lightweight operations to determine what the change in state should be from the last time display was called to the next time.
For example, if you're animating something, this would be where you change its position or orientation.