Those are true currently, but I would like to fix some of those.

* It doesn't recur into objects/paths/filters.
  
Only because they are not simple.
* It only handles "simple" cases.

I want to fix this, and I think the solution is to not allow access to the not Rep fields, and uses the smart constructors.
* It passes along the variance to the recursive call.

Correct
* It can return an arbitrary value -- but how do lists/pairs get combined?

No, the current function can not return an arbitrary value it has to return a `Rep?` to be combined by the type constructor that was destructured. I plan on implementing more functions that would have different properties. For example one that recured over two Rep and only called the function when they had the same structure but didn't require the return type to be a rep. This can be used in infer and subtype.