Not really anything to 'pin' a package down to be able to prevent removal, but allow upgrading.
You can hammer a spike into a package, can't be deleted, purged, upgraded, licked, anything...
But it's a wee bit more complicated than most things.
For example, we wish to pin firefox down: (you'd use the proper full name of the package, of course)
echo firefox hold | dpkg --set-selections
which would then make 'firefox' immortal. BUT, it cannot be upgraded in this state either.
To remove the hold status is a bit easier, but it's kind of a sweeping gesture:
removes the HOLD status from EVERYTHING! So if you wanted to hold a few packages, you'd best keep a list to reapply later
It's actually quite pleasant and easy to perform using aptitude or synaptics, as they have menu options to hold/unhold a package, taking care of all the bookkeeping behind the scenes for you. I'd recommend using one of those (or any of a myriad other package managers you might encounter)
With Aptitude, command line usage is possible too:
aptitude hold <package>
aptitude unhold <package>
Remember though, you'll need to 'unhold' something if want it to upgrade. Although if you use the GUI side of Aptitude, it should tell you if something that's held is upgradable