山本です。

>eql?の再定義がうまくいっていないのでしょうか?

eql? を再定義した場合は、hash も再定義する必要があります。

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Object#eql.3f

というわけで、こんな感じでしょうか。

class Hoge
  def initialize( n )
    @name = n
  end
  def eql?( otr )
    @name.eql?( otr.name )
  end
  def hash # a.eql?(b) が成り立つときは a.hash == b.hash でないといけない
    @name.hash # なので、 @name.hash + 1039 なんてものでも OK ?
  end
  attr_accessor :name
end

dat = [ Hoge.new( "hoge" ),
        Hoge.new( "hage" ),
        Hoge.new( "boke" ),
        Hoge.new( "hage" ),
        Hoge.new( "boke" ) ]
dat.uniq!

dat.each do |d| 
  print d.name,"\n" 
end