Is there a way to program iTunes to only play all of your songs once?
This can easily be accomplished with smart playlists.

Make a smart playlist where the play count is less than one.


Then base iTunes DJ on that playlist.


You could also select all the songs (no matter what play count and simply add them to a normal playlist and have that playlist not shuffle, but play counts are more durable across launches of the iTunes app.)

And, there's no reason you can't make a second iTunes library just for this purpose. Be sure to not import or organize the tracks and have this second library file just reference the main library. Play through one time and the play counts will all be 1 in this "special" library - not the main library. Change the less than 1 to 2 - and you get the second pass of all the songs on DJ.

Also - there is a nice writeup in MacWorld explaining how to use this sort of smart playlist for listing to audio book chapters.