What about:
(defun c:perp2ent (/ entity pt)
(while (setq entity (car (entsel "\nSelect entity: ")))
(while
(setq pt (getpoint "\nSelect point to draw perpendicular from: "))
(entmake
(list '(0 . "LINE")
(cons 10 pt)
(cons 11 (vlax-curve-getClosestPointTo entity pt))
) ;_ list
) ;_ entmake
) ;_ while
) ;_ while
(princ)
) ;_ defun
It can get a little bit funky if you try and draw perps to splines or polylines that curve back in on themselves, but otherwise it works.