How to order some rows one way, and the rest another way?
This returns the top 3 rows according to ORDER BY x DESC and appends the rest sorted by y DESC:
WITH cte AS (TABLE example ORDER BY x DESC LIMIT 3)
TABLE cte
UNION ALL
(  -- parentheses required
SELECT e.*
FROM   example e
LEFT   JOIN cte USING (id)
WHERE  cte.id IS NULL
ORDER  BY e.y DESC
);

TABLE is just shorthand for SELECT * FROM.
UNION ALL makes sure that the two derived tables are just appended without trying to eliminate (non-existent) duplicates and thereby messing with the sort order.
Parentheses are required so that ORDER BY only applies enclosed SELECT, not to the complete set of rows.
See:

Combine multiple SELECT statements

Is order preserved after UNION in PostgreSQL?


Related:

Combining 2 SELECT queries and printing the results in PostgreSQL

Is there a faster way to get UNION ALL behavior in Postgres?


Without UNION
SELECT e.*
FROM   example  e
LEFT   JOIN (
   SELECT id, x FROM example ORDER BY x DESC LIMIT 3
   ) c USING (id)
ORDER  BY c.x DESC NULLS LAST, e.y DESC;

Same result.
The LEFT JOIN results in c.x being NULL except for the top 3 chosen rows. So the first ORDER BY items c.x DESC NULLS LAST only sorts the first 3 rows and leaves the rest unsorted. The second ORDER BY item e.y DESC sorts the rest as desired.
About NULLS LAST:

Sort by column ASC, but NULL values first?

db&lt;&gt;fiddle here
If the table is not trivially small, you should have and index on (x) and another one on (y)