I'm not sure Postgres has infrastructure to do that, though, because it doesn't have shared plan cache, for example.
And no indexes.
Also, is the problem with the 50 join query that the planner screws it up, or that it's fundamentally doing too much?
Implementing only the X=1 case would also dramatically simplify the design of such a feature. Limiting it to read only queries would also make everything much simpler.
Which means that the capacity to buffer up data until it's all produced is present. But it might still be awkward to make it the default.
SELECT foo.x, bar.y FROM foo WHERE bar.z > random() ORDER BY foo.x;
SELECT x FROM foo ORDER BY x; -- Meanwhile, concurrent updates are happening to foo, so re-running the query gets a different result set.
"We choose to do this thing and the others, not because they are easy, but because we ask 'how hard can it be?'"
Maybe warrant a new SQL syntax, like
select * from table limit 10 queue X