Saving user preferences per project
One way to do that is by manipulating with startup.blend's.  

(I feel Python solution probably should be somewhere here... Also this way is a little bit strange because of dealing with multiple config files)


I save user settings so the main startup.blend (default one) looks
like this:


In this .blend which will be the startup for the main
project, continue setting up new preferences. Change Grid color in 3D View so it differs from default settings, activate some addons etc. I also dropped default lamp and made deselecting everything to happen on Ctrl + Shift + Alt + A, so the startup-for-CurrentProject.blend looks like this:



Create backup of the main startup.blend (renaming it to
startup_Main.blend), save User Preferences in the opened .blend.
Open file browser, find there new generated startup.blend (how to find Blender's config file), cut it
from there and paste in work folder. Also rename this one in
something user-friendly, like startup-for-CurrentProject.blend
(for ease). Now, you'll be opening CurrentProject.blend using this
file. Also, make sure to rename the main startup_Main.blend back
to startup.blend so Blender to find exactly this one, not
something else.
Without closing Blender continue creating something or open .blend which will be the main project, I call it CurrentProject.blend. I added something so
it to differ from that bunch of startups. Saved it.


Now if creating / opening blend (or reloading default one by Ctrl + N), you'l see that default user preferences remained unchanged.
To work on your project now you should open work folder and that
    startup-for-CurrentProject.blend you've saved earlier. Press
    Ctrl + O to open saved project using these
    settings. Find CurrentProject.blend and load it. 



New settings were saved including enabled addons and keyboard
shorcuts.  

Now, you have two .blends in work folder -
startup-for-CurrentProject.blend and CurrentProject.blend.