VBA(VBも?)の場合、オブジェクト変数に代入する場合、
変数名の前にSetをつけなければならない理由はなんなのでしょうか?

そういう言語仕様だからというだけでしょうか?
それとも、同じオブジェクト変数に代入する場合でも、Setを伴う場合と
伴わない場合の2ケースあるのでしょうか?