これが機能しない理由は、MySQLでは、サブクエリ内で更新(実行可能)しているテーブルを参照できないためです。
ただし、これは、FROMでテーブル自体の代わりにクエリを使用することで解決できます。これにより、更新するテーブル値を参照する代わりに、要求されたテーブル値をコピーする効果があります。
したがって、これは、たとえ直感に反していても、効果的に機能します:
DELETE FROM cancome WHERE user_id IN
( SELECT user_id FROM (SELECT * FROM cancome) AS cancomesub
GROUP BY user_id HAVING COUNT(user_id)>3 )
limit 3