What I've gone through my dev time reusable code for mostly kind of seen as if not defined to many as changing the parameters and making it what you need and to want it to be done, as you said correctly becomes a maintenance nightmare, from my dev time we started using a pattern like a factory which whole purpose was job call the factory to execute the implementation based on the parameters passed,
Configuration duplication is far scarier than ever before b/c of its declarative nature, reusable workflows if not discussed kind of seen as asking for different tasks based on parameters passed, but I kind of tend to see reusable workflows as idempotents otherwise these days where policy as code prevent and mixed to prevent what should not be in production if not compliant otherwise, maintenance and troubleshooting can take hours and days, what we started to do some research on since configuration code somewhat becomes PL to incorporate design pattern from SE world to add it an abstraction layer on top reusable workflow and make it predictable task,