まずは質問のタイトルは無視します。
質問者さんはおそらく結果として"hogefuga"を取得したいのだと思います。間違ってたらこの回答は無視してください。
実はArray#joined()には2種類あります。
一つはArray<String>に実装されたjoined()でこれは要素のStringを結合して結果としてStringを返します。
もう一つはElementがStringを除くSequenceのときに要素を連結してFlattenSequence<Array<Element>>という特殊なSequenceを返します。
例えば[[1,2,3], [4,5,6]].joined()は[1,2,3,4,5,6]のようなSequenceが返します。これはArray<Int>ではなくFlattenSequence<Array<Int>>であることに注意してください。
提示のコード[["hoge"],["fuga"]].joined()でもこちらが使われ、結果として["hoge","fuga"]のようなFlattenSequence<Array<String>>が返されます。
次にArrayのイニシャライザですがArrayには複数の種類のイニシャライザがありますが、この場合は引数としてSequenceを受け取るイニシャライザが用いられます。
このイニシャライザは受け取ったSequenceの要素をそのまま要素としたArrayを返します。
提示のコードではこのイニシャライザに[["hoge"],["fuga"]].joined()で生成された["hoge","fuga"]のようなSequenceを渡していますので["hoge","fuga"]であるArrayが生成されます。
これはArray<String>であってFlattenSequence<Array<String>>ではないことに注意してください。
以上が提示のコードが行っていることです。
もし[["hoge"],["fuga"]]から"hogefuga"を得たい場合は例えば次のようにします。
swift
1let s = [["hoge"],["fuga"]].flatMap { $0 }.joined()
質問のタイトルへの回答は
swift
1array.flatMap { $0 }
です。