Because instead of one special function (swap) it needs two (swap and compare), and the two refer to the same data. So, put that data in a struct and give it methods.
rand.Shuffle was introduced in 1.10 which is currently the tip, maybe it's a case of lessons learned?