В магистрали Scala многое из этого уже сделано для вас: классы дел теперь расширяют соответствующую характеристику ProductN. Однако в продукт включены только прямые члены класса case (т.е. не наследуемые), поэтому, если вам нужно включить члены из супертипа, они должны быть абстрактными в супертипе и иметь конкретную реализацию в классе case.
Вот сеанс REPL (транк Scala, 2.10.0.r25951-b20111107020214),
scala> trait A { val a: Int }
defined trait A
scala> case class B(b: Int, a : Int = 1) extends A
defined class B
scala> val b = B(23)
b: B = B(23,1)
scala> b.productArity
res0: Int = 2
scala> b.productElement(0)
res1: Any = 23
scala> b.productElement(1)
res2: Any = 1
scala> b._1 // use Product method ... note result type
res6: Int = 23
scala> b._2 // use Product method ... note result type
res7: Int = 1