コロンがついているのは変数名ではない。Symbolのリテラル表記だ。
obj.new(:foo => "hoge", :bar => "hage")
は
obj.new({:foo => "hoge", :bar => "hage"})
と書いたのと同じ意味だ。つまり、obj#newにHashを渡している。

で、なぜSymbolオブジェクトをHashのキーにしているかというと、

・タイプしやすい。文字列に比べて1文字少なくて済む
  obj.new("foo" => "hoge", "bar" => "hage")
 とタイプするよりは楽だということ。
・Symbolの方がStringよりも生成時に性能的に有利。
 Symbolは内部的には整数で表されてるんで。

ということかな。まあ慣習で強制されているものではないので、
SymbolではなくStringをHashのキーに取る実装もあり得るし存在している。