それは理解してる(はず)んですが、質問しているのは、
「配列確保と書いてある処理に、::operator new[]()ではなく、::operator new()を使ってメモリ確保してるのは大丈夫なんでしょうか」
ということなんです。そして、疑問に思った理由は、new[]の方は、いま提示してくださった、
「個別にデストラクタ呼んで〜」を実現するために、確保したメモリの近くにこっそり、N * sizeof(type)の N を記憶配置する処理が、newに加わったものと聞いているからです。
delete[]は、この N の書かれたメモリを読んできちんとデストラクタを呼ぶはずです。

そして今newaop.cppを読んでいるのですが、
void operator new[](size_t)
はどうやら、operator new()に処理を丸投げしてるようです。
なので、言語仕様に沿うためにnew[]を作っただけで、実はマイクロソフトのnew()は万能かもしれないという予想ができました。