The only valid redirection is the one based on user browser, not IP, IMHO.
However, if you want to use that kind of redirection for the home page (not the others pages), then that redirection should be working the first time, so that users can eventually choose to go to another version of the site they prefer (i.e.: I live in Spain and I go to domain.eu. When I travel in the US, I still want to go to domain.eu, not always being pushed to use domain.com).
Moreover, doing that, you will let crawlers to discover also the others version even though they were redirected to the one corresponding to their IP the first time. In other words, Googlebot (Mountain View, USA, IP), the first time will go always to domain.com, but once there it will able to discover also domain.eu and domain.co.uk from the versions selector, and it won't be redirected again to domain.com.
Said all this, the fact is that you want to target a political area (EU) with domain.eu, the world with domain.com and the UK with domain.co.uk.
This desire to target three different kind of geographies complicates everything :-).
The only solution I see is:
-
Domain.com set up as "global" >> hreflang="en". All users using English will see it in the SERPs despite of their location but in these cases (see point 2 and 3);
-
Domain.eu set up as the site for the European countries >> hreflang="en-ES" - hreflang="en-IT" - hreflang="en-DE" and so on.
-
Domain.co.uk set up as the site for Great Britain >> hreflang="en-GB".
Doing this and implementing the hreflang in the canonical URLs of the sites and referencing only canonical URLs of the others sites (apart having the self-referral hreflang), then you should be safe.
However, remember that with those hreflang, people searching in another language than English will never (or almost never) see your sites but for brand name searches or very specific brand + product queries.
Therefore, I am still of the idea that having only English websites for targeting the world means missing a huge business opportunity.