I want to put a Canvas with an image in my window, and then I want to pack widgets on top of it, so the Canvas acts as a background. 
Is it possible to have two states for the pack manager: one for one set of widgets and another for another set?
Not without swapping widget trees in and out, which I don't think can be done cleanly with Tk.  Other toolkits can do this a little more elegantly.

COM/VB/MFC can do this with an ActiveX control - you can hide/show multiple ActiveX controls in the same region.  Any of the containers will let you do this by changing the child around.  If you're doing a windows-specific program you may be able to accomplish it this way.
QT will also let you do this in a similar manner.
GTK is slightly harder.
How do I overlap widgets with the Tkinter pack geometry manager?