Powodem, dla którego to nie działa, jest to, że MySQL nie pozwala na odwoływanie się do aktualizowanej tabeli (może się pojawić) w podzapytaniu.
Można to jednak rozwiązać, używając zapytania zamiast samej tabeli w FROM, co powoduje skopiowanie żądanych wartości tabeli zamiast odwoływania się do aktualizowanej.
Tak więc skutecznie, nawet jeśli jest to sprzeczne z intuicją, zadziała :
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