Hello Dismantled. Your question is an age old programming problem that I think everyone struggles with from time to time. Depending on what you're trying to accomplish there are likely quite a few things you can do.
First, my number one programming rule is, if it does what you want and works for your project, then it isn't intrinsically wrong. If making lots of unique scripts that contain a lot of the same code works for you and your project then there's nothing wrong with that. There will always be ways to make you project better, but usually its a trade off between finding the best solution and finding solutions that work well enough.
That being said here are a few ideas that might help to reduce redundant code.
You said your script is large. Maybe consider splitting its responsibility logically across several nodes, especially the parts that you find are unique across instances. That way, you'd have one base node with the code that doesn't change and lots of unique nodes that support it that contain unique behavior. Then implementing unique behavior is as easy as dragging and dropping nodes into the scene tree.
Export an enum list to the inspector so that you can pick which functionality you'd like to use from a drop down list. Then feed the selected enum into a match statement such that each case handles the unique code.
Last, consider "dependency injection". In this case you have three types of scripts. 1. The script that you want to give unique behavior 2. A script that contains the unique behavior in the form of functions. 3. A script that decides which behavior each node requires at runtime and injects the behavior in the form of some kind of reference to a function.
The list kind of goes from easy to more advanced. If #3 makes no sense, don't worry about it, but its a good concept to be aware of. If you can be a bit more specific about what is unique about each node, I might be able to give a more specific suggestion, but I hope there's something useful for you in the above. Good luck!