Everyone who makes major changes to the source code will face this problem. I've got a 3-pronged approach:
1. I keep a changelog of all changes we make, so that I can patch changes in manually when there's an upgrade.
2. I plan to submit useful changes to the NopCommerce team in the hope not only that others will benefit but also to make my own upgrade path easier.
3. I've requested hooks or a plugin model so that user code can go into a seperate DLL of which NopCommerce controls only the signature. Please vote for that feature if it would help you!
If you have other ways or ideas for making upgrading easier please post them!
I faced the same problem,in order to be able to upgrade to any future verision of nopcommerce With concedering any custom code,I think the best way is to add a new project folder to the nop solution in VS,where the added project will be a dll project writing the namespace of such dll as MyCustomCode or yor name so that you can esaily refrence all dlls in the project & keep using such dll in all nop future release .
One more thing,in any place of the website where yo need to use your new dll,remember to add a comment line indicating that this is yours not the original release i.e MyCustomCode .