I'm only sharing our experience and approach, not arguing in any particular direction for the CS&S distribution, especially given that our approach is optimized for our "hosted-multi-user" use case.
We actually dropped extension support a while back in favor of either integrating features into core or making them API clients/integrations. Prior to that we did implement API versioning, support for multiply versioned GREL runtimes and two SDKs as new surface areas for integrations. This allowed us to keep the internals (and most importantly dependencies!) free from integrations, it was a complete game changer for maintenance of "core".
It might be tricky for the CS&S distribution given local installs but maybe it could be possible if there was some broker protocol in place?
I am commenting here since this is the thread where we discussed the DEF grant. Our application was not selected for funding. the Data Empowerment Fund (DEF) did not share more details as they received over 800 eligible applications.
I open PR#347 to update the grant status accordingly.
There's a few "concrete" steps that can be taken to make things much better overall in OpenRefine, especially from a development and extendibility perspective.
Interfaces - We do a crap job here actually. What we need are better ones and perhaps more of them, to provide more looser coupling.
With more/better interfaces, we can build bundles, which allows us to more easily create OSGi services to point to dependencies that also can be bundles (a simple JAR that imports and exports a set of packages and allows communication through its registered services and services from other bundles).
In order to make it easier for 2. we might look at bndtools.org to automatically build bundles (something that IntelliJ and Eclipse actually use).