First off - it's certainly a thing. ARP was never intended to be a secure protocol and is utterly distributed in operation.
The gateway in a given subnet isn't special - it's just another host with an IP address and an associated MAC. Barring any special functional/security measures, the L2 environment is going to flood every ARP request to every host in the broadcast domain and, in turn, is going to also flood any ARP responses - which, unfortunately, could include a spoof. In short, the gateway is just another host answering ARP queries and has nothing to do with their distribution or validation.
So why isn't this more common? The first reason is that competing ARP responses are going to end up causing end hosts to just lose connectivity as often as cleanly hijacking the gateway. It's basically a duplicate IP, after all. The second reason is that, well, it isn't that uncommon as an accidental misconfiguration but it tends to be so blindingly obvious as to be not all that terribly effective as anything other than an annoyance.
EDIT (to answer question in comments about hosts losing connectivity):
So let's say the gateway is at 192.168.1.1 with a MAC of aaaa.bbbb.cccc. Under normal circumstances whenever a host ARP's for its gateway it will send a message saying "Who has 192.168.1.1, tell xxx" and the router responds with "192.168.1.1 is at aaaa.bbbb.cccc". When an ARP spoof occurs the same request ("who has 192.168.1.1, tell xxx") will be met with two responses - one being the correct one (aaaa.bbbb.cccc) and the other being the spoof (say dddd.eeee.ffff). For the hosts listening for this information they'll take the first response they see and in practice it's the luck of the draw which response (fake or real) shows up in what order and, as such, it's pretty likely that the various hosts on the subnet are going to be churning their ARP tables between the real and fake gateways. This is going to manifest as inconsistent connectivity problems (ARP changes aren't instantaneous on the end hosts) as well as a slew of log messages about duplicate IP's on the subnet.