It's not usually easy to do, but it also depends on the particular modifications.
It's good to always at least record/log what changes you've made, so you can re-implement those changes when updating to a newer version of BE. If you don't have the changes logged somewhere, a program Beyond Compare is really helpful for comparing
two folders to see which files are different, and the specific changes within each file. With this, you would be comparing your modified version to the original version you started from to see what changes you previously made (if you don't remember what
changes you made).
If you're looking to add additional functionality, that functionality can either be in a new class, or in some cases if the class within BE is a "partial class", then you can create your own partial class (for the same object), and add your additional
functionality in that. The two (or more) partial classes get merged into one class when compiled. Probably for a lot of modification types, this scenario doesn't apply (but does in some cases).
Obviously it's best to try and make as many of the modifications within your own theme. For example, I have a JS file in my theme that removes/hides some elements on pages that are outside of the theme. So when these non-theme pages are loaded
in the browser, the JS modifies/removes/changes some of the layout on those non-theme pages. It's a little hacky :)
Right now I don't have any modifications outside my blog theme. This is the ultimate for making upgrades thoughtless.
In some cases, if you have a request, we can modify BE to make something configurable or easier to modify from the outside so you don't need to re-add your modifications every time.