All roles are defined at site level. The fact that roles are defined (capabilities set) at site level has got nothing to do with the actual capabilities. The actual capabilities are resolved based on the context of the role assignments.
Role assignment are context based. If you assign a user to a teacher role in a course, then he is only the teacher of that course and nothing more. If you assign this user to a teacher role in the site context, then he becomes the teacher of all courses in your site. If you assign the teacher role to a user at the course category context, then he becomes the teacher of all courses in that course category. You can not have this teacher being able to create course and only manage his own courses using one role. This does not make sense because creating courses is really not a course level action, but a site level action.
To let all your teachers create courses you need to create an additional role with everything set to inherit, but course creation set to allow, and assign your teachers to this role at site level.
I will check with the block problem.