Here is a slightly updated version of the patch - rebased to current master and fixing some minor issues to handle expressions (and not just the Var nodes as before).
The changes needed to support (Expr op Expr) are mostly mechanical, though I'm sure the code needs some cleanup. The main issue I ran into is the special case clauselist_selectivity, which does
if (list_length(clauses) == 1) return clause_selectivity_ext(...);
which applies to cases like "WHERE a < b" which can now be handled by extended statistics, thanks to this patch. But clause_selectivity_ext only used to call restriction_selectivity for these clauses, which does not use extended statistics, of course.
I considered either getting rid of the special case, passing everything through extended stats, including cases with a single clause. But that ends up affecting e.g. OR clauses, so I tweaked clause_selectivity_ext a bit, which seems like a better approach.