Just to prove it can be done with standard combinators:

```scala
implicit class RichObservable[A](obs: Observable[A]) {
    def collect[B](f: PartialFunction[A, B]): Observable[B] = obs.map(f.lift).filter(_.isDefined).map(_.get)

    def unseen = obs.scan((Set.empty[A], Option.empty[A])) { 
      case ((seen, _), a) if seen contains a => (seen, None)
      case ((seen, _), a) => (seen + a, Some(a))
    } collect {
      case (_, Some(a)) => a
    }
}
```

Not pretty I know ...