You can use DLRS in Scheduled mode to refresh declaratively-created rollups on a regular basis to account for changes to the Product Family.
Alternately, you can pursue the second solution you already explored by adding automation or code (either a trigger or a Process Builder + Flow combination) running on updates to the Product to. That automation would then propagate changes to the Product Family field to related Opportunity Products, ensuring that your native rollup summary field on Opportunity will recalculate in real time.
Note that you cannot achieve this with Workflow Rules or Process Builder alone; you need a Process calling a Flow to query and update all of the linked Opportunity Products.
There isn't a magic bullet to achieve three-object rollups like this, but it can be done by combining the tools we already have.