Yes, I believe local functions are usually defined with flet.
At any rate, this solution works using labels:
(defmacro ntimes (n &rest body)
(let ((h (gensym))
(g (gensym)))
`(let ((,h ,n))
(labels ((ntimes-local (,g)
(if (> ,g 0)
,@body)
(if (zerop ,g)
nil
(ntimes-local (1- ,g)))))
(ntimes-local ,h)))))
(Sorry, but again I don't know how to preserve the formatting of my code in this newsgroup.)