In simplest terms, without checking anything, something like this:
(defun C:CapLines (/ pt1 pt2 ht ptA)
(setq
pt1 (getpoint "\nEndpoint of Line 1: ")
pt2 (getpoint "\nEndpoint of Line 2 aligned with 1: ")
ht (getdist (mapcar '/ (mapcar '+ pt1 pt2) '(2 2 2)) "\nHeight of capping half-Ellipse: ")
)
(if (> (car pt2) (car pt1)) (setq ptA pt1 pt1 pt2 pt2 ptA)); switch so pt1 is right of pt2
(command "_.ellipse" "_arc" "_non" pt1 "_non" pt2 ht pt1 pt2)
(prin1)
)
It doesn't require the Lines to be vertical -- it will do this if at endpoints of parallel Lines aligned relative to the direction between them:

but it will work as expected only in the more-upward-facing condition. And it's up to you to use it in appropriate conditions -- it will do this kind of thing if there's an inappropriate relationship between Lines:

and it will do it in isolation, unrelated to any Lines [or anything else].
You can give it the height by picking on-screen or by typing in a distance.
It could be made to [among other things]:
Ask for selection of the Line objects rather than locations, so it can test for alignment, and/or do it up-side-down, and put the Ellipse on the same Layer as [one of] the Lines [for a routine that does those things, and allows different object types as long as their ends align and face the same way, see CapEnd.lsp >here<];
Draw an Arc instead of an Ellipse if the height is equal to half the distance between the points;
Have the usual enhancements like *error* handling and Osnap control.
Kent Cooper, AIA