You can add the files with changes you want to keep, then stash the rest of the files and clear the stash:
git add file2.cpp file2.h file3.cpp
git stash --keep-index
At this point, you’ve stashed your unwanted changes. If you’d like to permanently get rid of them, run:
git stash drop
Now you have file2.cpp, file2.h, and file3.cpp staged for commit. If you then want to stash these files (and not commit them):
git reset
git stash
Now you’ll be at your previous commit, with only those three files stashed.
Update:
Git 2.13 and later includes a more direct way to stash specific files with git stash push, as VonC explains in his answer.