I realized that if I create a basic view with enum fields converted to text, it does the trick! I query the view with text predicate and the view implementation (I think) converts it into enums when querying the underlying table.
But I still think it should work without such workarounds...
"PostgreSQL 10.3 (Ubuntu 10.3-1.pgdg14.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4, 64-bit"
I gave use_remote_estimate a try but unfortunately it is the same.
Additionally I see on your page (in "Remote Execution Options"):
"By default, only WHERE clauses using built-in operators and functions will be considered for execution on the remote server. Clauses involving non-built-in functions are checked locally after rows are fetched."
I think enum types somehow fall into the same category and they are filtered only locally, which is seen in the plan (Filter clause). If I use only columns of built-in type in the predicate everything works as expected (with filtering on the remote server).
I need a workaround to make this query execute remotely. One option may be using a materialized view with these enum values converted to text but then I will need to refresh this view periodically on the remote server.
And actually it looks like a performance bug in the DBMS...