I had the idea (I'm not saying it's original, it's just what I thought at the time) of course lessons consisting of a series of questions, and each question is defined as a JSON object.
There are built-in question-templates like multiple choice, free-form answer, or just true/false.
If a course needs something really specific, then it can implement a custom renderer for that new template type, so that a course isn't held back by the upstream project. If it's a template that might be useful for more people, then it can be integrated into the core project.