There's 2 approaches (1) normalize the data so a normal sort works properly (2) create a custom sort.
While it's fun to do the latter, it means every time you have wonky data you have to write a new sort function, and as easy as it is to do the latter, I'd recommend the former.
Having said that, here's a sort routine do do what you want to dispel the notion I'm just being a curmudgeon.
(setq lst
'(
"12-08-07 75% Design Development"
"08-08-07 Design Development"
"03-08-08 Progress Print"
"07-08-08 For Construction"
"12-08-08 For Permit & Pricing"
"01-08-09 Addendum No.1"
)
)
(defun foo ( lst )
( (lambda (f) (vl-sort lst '(lambda (a b) (< (f a) (f b)))))
(lambda (x) (strcat (substr x 7 2) (substr x 1 2)(substr x 4 2)))
)
)
(mapcar 'print (foo lst))
"08-08-07 Design Development"
"12-08-07 75% Design Development"
"03-08-08 Progress Print"
"07-08-08 For Construction"
"12-08-08 For Permit & Pricing"
"01-08-09 Addendum No.1"
I could have converted the date strings to numerical values and sorted on same but in the interests of brevity I didn't.
Edit: Revised per
this post.