1. Cohorts would probably work. I personally love cohorts. But it isn't clear if all of them will have the same courses assigned. That said, you could have a variety of cohorts (I used to have>50 at a time).
2. The short answer is yes. The longer one is really...it all depends on how you want to award hours. Do you just want hours on a certificate? That's easy if you use the Custom Certificate plugin. Do you use Configurable Reports (plugin) to do some sort of student transcript and track how many hours students get with SQL reports? Well...yes, but quite a bit might go into that (including custom course fields and such).
3. Don't know what you mean by this? You want them to get a certificate at the end of a course? Easy to do. A Badge? Easy to do. A Badge after completing a series of courses? Easy to do. Some other thing? Might be more complicated (Competencies?).
4. Not sure what you mean by have access to create...Admins can pretty much do anything. You want to upload a document for only those students? You can do that; just add restriction for membership in the cohort(s) you add them to. If you use Configurable Reports, you could probably build a report that pulls particular courses and is only visible for particular cohorts as well. But that is a bit more complicated.
5. If you use the Custom Certificate, you can have it email students a certificate when they complete the course (but course completion restriction is also a plug-in, but a super useful one).