If you decide to 'convert' them to LWPolylines, just entnext through the 3DPolyline and extract the 10 code from each vertex, then with some additional extracted data (color, layer, linetype, ltscale, etc.), you can easily 'convert' them all.
This should get you started. It will step through a 3DPolyline and extract each 10 code (vertex) and put it in the form needed to entmake and LWPolyline.
(defun foo (e / orig lst)
(setq orig e)
(while (setq e (entnext e))
((lambda (ent)
(if (and (eq "VERTEX" (cdr (assoc 0 ent)))
(eq orig (cdr (assoc 330 ent)))
)
(setq lst (cons (reverse (cdr (reverse (assoc 10 ent)))) lst))
)
)
(entget e)
)
)
(reverse lst)
)
eg.
Command: (foo (car (entsel)))
Select object: ((10 -369.785 58.9001) (10 -342.373 97.9905) (10 -331.342
65.9164) (10 -306.604 99.9951) (10 -291.227 54.8909) (10 -264.149 112.691) (10
-244.76 72.5985) (10 -225.371 114.028) (10 -211.331 71.262))
Once you have this, the rest is pretty easy...