Andrew - it would have to dynamically create a table structure out of the list of constants. This is what the PL/SQL function is doing. For a short list this is wrong (inefficient) so figuring out when to do it is probably quite tricky in general. And the Oracle optimizer might not have the hooks in place to do things like create dynamic temp tables ...
PG is not smarter about this, in fact it only recently got smart enough to do the pseudo-JOIN code for "WHERE foo IN (SELECT ...)".