In the world of corporate training, it is often necessary for students to retake courses they have already completed once, either on a fixed schedule (e.g. every year) or on an ad hoc basis. An example might be recertification of a "first aid" course in order to stay current. I can imagine something similar for educational institutions if a student wants to retake a failed course.
The main difficulty with re-taking courses is that a course is typically made up of several activities and each activity may contain data associated with the users, so there is no way to easily reset the user's participation (so it appears like a fresh course). Some activities have the concept of multiple attempts but it is not handled in a uniform way across modules.
At the moment this is often handled by creating multiple copies of courses for each year. In Totara we have a concept of a recurring course which is handled on the backend via backing up and restoring the course without it's user data. This approach leads to a lot of extra courses, and in cases where each user must repeat the course on their own schedule is unsustainable (you would need one course per user!).
We are keen to put together a spec detailing how this could be solved. I've got some ideas but they are quite far reaching and would require the co-operation of core moodle and plugin authors. I've created a wiki page with a (very) draft proposal here:
I'd be interested in seeing if this is something that's been considered before or affects others.