>実際必要な情報は
>      counter=0
>      lambda{ counter+=1 }
>この2行だけなのに、そのクラス定義は冗長すぎる

それの前後を Proc.New{ ... }.call で囲むだけだろ。
それだけで独自領域を持ったlambdaが作れる。
確かにちょっと冗長だが、我慢できる範囲だと思うが。