In an ideal world you’d never have to fork a plugin, because developers would always make their plugins extensible with hooks, just like WordPress itself does. But unfortunately that’s not usually the case, and it’s sometimes necessary to directly modify a plugin to make it do what you need.
In those cases, you want to make sure that the plugin is never automatically updated with a newer version, because that would override your customizations. Mark Jaquith blogged about how to block WordPress from checking if a plugin has updates, and I’ve tweaked his approach a bit to support multiple plugins and also to display a notice on the Plugins page. My version of the code is available in my functionality plugin skeleton.