Fixed it by removeing unbinds and moving the page checks into the if right/left blocks:
$("#right,#left").click ->
#alert page_no
id = this.id
patt = /-?\d+/g
circles = $(".circle")
if id is "right"
if page_no >= (size-1) #moved first if statement here
return
page_no = page_no + 1
for cir in circles
left = $(cir).css("left")
lef = parseInt(left.match(patt))
le = lef - 80
$(cir).css("left","#{le}px")
else
if page_no <= 3 #moved second if statement here
return
page_no = page_no - 1
#alert page_no
for cir in circles
left = $(cir).css("left")
lef = Number(left.match(patt))
le = lef + 80
$(cir).css("left","#{le}px")
http://codepen.io/anon/pen/Hhazm
What was happening was unbind('click') was unbinding the parent function as well, so that none of the page number checking was happening. By using return, click is still bound but the page checking still happens.
The if statements will need to be adjusted to get you up to 15 pages.