Důvod, proč to nefunguje, je ten, že MySQL vám neumožňuje odkazovat na tabulku, kterou aktualizujete (může přijít) v rámci dílčího dotazu.
Tomu však lze předejít použitím dotazu namísto tabulky samotné ve FROM, což má za následek zkopírování požadovaných hodnot tabulky namísto odkazování na tu, kterou aktualizujete.
Tak efektivně to bude fungovat, i když je to kontraintuitivní:
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