なんどめだナウシカ

ハッシュの h[key] は、「ハッシュ機構」という特殊なものがあるわけじゃなくて
「オブジェクト h の [] メソッドに引数 key を渡している」
という処理を簡単に表記できるように特別扱いされたものに過ぎない

h = {'one' => 1'}
p h['one'] #=> 1
p h.[]('one') #=> 1

つまり、h['one']['two'] という表記があったなら、それは

 h.[]('one').[]('two')

というメソッドチェーンを表しているに過ぎない
メソッドチェーンだから、[]('two') のレシーバ、つまりドットの前の、h.[]('one') の返り値、
が nil だと普通に NoMethodError になる
そんだけ