Can you explain your answer about option 3 a little more, are you saying that audiences are being used for controlling audience visibility too, so you need people who no longer meet the audience criteria to be removed from the audience but left in their courses?
My main concern here is that if audience enrolments are allowed to get out of sync with the audience membership, it will be confusing as to why certain users are still enrolled in the course. People who were in the audience but aren't any more will still be listed as enrolled via audience X, but when you look at audience X they aren't a member. Also that means there is actually no way to unenrol them (aside from removing the audience completely) - any user who was ever a member of the audience (even if accidentally) will now stay enrolled in the course.
Therefore I think it's worth trying to explore other possible solutions before filing a new enhancement (we might still need to, but I'd just like to explore other options first).
The option Craig described does sort of do what you want - it prevents the grades from being deleted when the user is unenrolled from the course - they will reappear if you reenrol them. However it doesn't really help since the record is still not visible while they are unenrolled. Perhaps though a combination of that option and changes to the record of learning to show all completions might work?
There is another option that I know of that might also help. Currently there are two ways that you can enrol users into a course using an audience. The first way is to 'sync' the audience - which means that the enrolments are kept up to date with audience membership - if people arrive they are enrolled, if people leave they are unenrolled.
There is another option, which is to instantaneously enrol all the members of the audience at that point in time as manual enrolments. That doesn't keep the enrolments up to date (if new members join the audience they won't be enrolled, but at the same time users who leave the audience won't be unenrolled). You can re-run this option whenever you like to add any new members who have joined (and it still won't unenrol old ones).
You can see what I mean in the attached screenshot.
Simon