cherry-picking works well for bug fixes that require isolated code changes, but I don't see that working for chunky features which have at least dozens of commits.
You could probably cherry-pick our changes and apply them on their 2.4 branch, but that would also cause massive merge conflicts for large changes.

But, as you just said, the differences are huge. THAT is where the problem is. Why are they huge? 
1) nobody takes the time to open a pull request upstream. I don't mean to sound cocky, but all changes I did to django-cms have been accepted upstream and the effort involved was quite small: https://github.com/divio/django-cms/pulls/kux?direction=desc&page=1&sort=created&state=closed
2) no upgrades in a long time. The longer the time you spend without upgrading the less they will care about pull requests on old branches. (assuming you start doing point 1)