Nice post! I think your encoding of functors could be replaced by:
object Module {
private class MyUnbalancedSet[A](O: Ordered[A]) extends MySet[A] {
... body as in your post
}
def UnbalancedSet[A](O: Ordered[A]): MySet[A] = new MyUnbalancedSet[A](0)
}
Which looks more like "normal" Scala but still offers the same amount of abstraction.