A nice option that I've seen implemented elsewhere...

A colour swatch which consists of a user-generated image containing all of the available colours for a product variant and an image map which associates each of the colours to an attribute value.