This problem has been previously discussed also here How to add value from custom object into an email
Any information how to overcome this problem would be greatly appreciated, as I've already read all possible existing documentation..
You can't accomplish this in the way you describe.
Instead consider making the Course Catalog a separately maintained Velocity token (which is in many ways more efficient). The Course becomes a first-level object. I described this approach a bit here.