ちょっと訂正。
operator=をサポートしていないオブジェクトの場合は
CArrayが使えないんじゃなくて、CArray::Addが使えないだけですか。

下のコードはコンパイルできました。

CArray<CStringArray, CStringArray&> a;
CStringArray tmp;
a.SetSize(10);
for(int i= 0; i< 10; i++ ){
a[i].Copy(tmp);
}

でも、

a[0].Add("123");

とかやった場合、CArrayのバッファが壊れたりしないか不安。