handle wiimote events in the display callback, and use glutIdleFunc() to set a function that just calls glutPostRedisplay().
That ensures that you continually render new images and each time your render your first update your application data based on the input events.
Of course don’t use an infinite loop to process events, only handle those that have arrived since the last frame.
The method suggested by you was very good. But what if the application becomes huge and if i don’t want the display callback being called all the time, what in that case, can i somehow do away with calling display over and over again?
Does it make sense (or: is it important) for your application to handle input events without rendering a new image?
After processing input you could check the amount of time that has expired since you last rendered an image and if it is less than 1/60 of a second you just return from the display callback without drawing. Perhaps even add a way to force rendering independent of elapsed time (for example when the window size has changed)
For large applications it is probably better to just drop GLUT and use a different framework. I think of GLUT as being most useful for small, demo like programs or quick prototypes - it gets you started quickly, but it has a somewhat simple application model.