A couple of minor bugs. This line:
<<set $haircolor_choice >= 0 >>
is basically meaningless. You want this instead:
<<set $haircolor_choice = 0 >>
Then, inside the <<replace>> macro you need to put whatever it is that you want to replace the current contents with.
Finally, you need to put in some checks to prevent $haircolor_choice from going out of bounds of the $haircolor array.
Once you've done all of that you'll get something like this:
<<set $haircolor = [ "black", "blonde", "brown", "auburn", "red", "ginger", "grey", "white" ]>>
<<set $haircolor_choice = 0>>
<<button "<-">>
<<set $haircolor_choice-->>
<<if $haircolor_choice < 0>>
<<set $haircolor_choice = $haircolor.length - 1>>
<</if>>
<<replace "#pc_haircolor">>$haircolor[$haircolor_choice]<</replace>>
<</button>>
<span id = "pc_haircolor">$haircolor[$haircolor_choice]</span>
<<button "->">>
<<set $haircolor_choice++>>
<<if $haircolor_choice >= $haircolor.length>>
<<set $haircolor_choice = 0>>
<</if>>
<<replace "#pc_haircolor">>$haircolor[$haircolor_choice]<</replace>>
<</button>>
Additionally, you might want to replace the "<-" and "->" in the buttons with "←" and "→".
Hope that helps! :-)