The internal rules are really simple:
1/ we keep all course data for all enrolled users - both active and suspended
2/ during full unenrolment we delete as much as possible - this is decided usually by activities (we can not delete forum posts because other posts my be replays)
3/ suspended enrolment means that user can not enter the course unless there is guest access (designed for both future and historic enrolments)
4/ suspended users are usually hidden in the list of participants, reports, etc. (there can be a switch to show all enrolled users, not just the active ones)
5/ gradebook keeps full history of all grades, so nothing is actually completely deleted unless you disable the grade history
Internally there is API that does full unenrol with data purging and seprate suspend (aka unenrol while keeping all user data), it is not really important what we call it in the UI, we can change the actions or better we can make it configurable.
Rosalyn: the self enrolment is now a separate plugin and fully abstracted, it is not hardcoded in core any more. Anybody can easily tweak it so that it suspends users only, and then let them reenrol without loosing any data at all (including group membership, forum subscriptions, gradebook...). We can even add more options that specify what to do when user requests self-unenrolment. The proposed solution for optional recovering of grades after reenrolment solves your problem in a different way.
The enrolment framework in 2.0 is completely redesigned, it is now a lot more flexible and allows developers to create pretty much anything. Many old problems from 1.7-1.9 were already solved, unfortunately there are still some missing features or unexplained changes. If there were more people testing 2.0dev we could have addressed some of these issue already and teachers would not even realised that something was changed internally. This is the first 2.0.0 release, as with each new major release there are some pending problems, if you do not like that please keep using 1.9.x for now.
2.0 is a big step, developers can not expect that everything works the same internally, the best way how to learn more about the changes is to actually study the new db tables and read the existing enrol plugins - no spec or design document is going to explain everything.
I personally hope this issue will be resolved quickly. And yes we need a new documentation page describing the new enrolments, we need user docs for most new features in 2.0.