Normally, B has a reference to A, therefore C also has to have a reference to A.
You are right when assuming that you can only get a type (class) through refelection. In order to obtain an instance your C assembly should also have a reference to the assembly that holds the type. You can then marshal your instance or serialize it and transfer from B to C.