Talk about reviving an old thread...! But I had exactly the same question, and there it was.
(osnap pt1 "app"), with one point, works in the case of objects that don't intersect but appear to [e.g. at different elevations], when 'pt1' is within aperture-box range of that apparent intersection. Some suggested solutions [here and on some other threads] were apparently assuming that situation. But I wanted to pick two objects at distinct locations, because I need their entity names saved, and the pick locations are also relevant to what I want to do. Then I want to find their intersection from those two pick locations, without the User needing to pick on it.
I was hoping to do it with (osnap) and the apparent-intersection mode, since in manual operation that mode can take two points, but as this question confirms, the (osnap) function won't accept more than one 'pt' argument. And I can't use (vla-intersectwith...), because one of the objects may sometimes be a nested one, e.g. part of a Block, and in that case (vla-intersectwith...) gives the right result only if the Block is inserted at 0,0 and has scales of 1 and rotation of 0.
I didn't find anything else that got at it by way of the (osnap) function, either, but I found a workaround that gets at what I want. Since you can give the APParent-INTersection mode two points within a command [unlike within (osnap)], you can find such an intersection by using a command to get at it, for example this way:
sel1 (entsel "\nFirst object: ")
ent1 (car sel1); incidental to the question at hand...
pt1 (cadr sel1)
sel2 (entsel "\nSecond object: ")
ent2 (car sel2)
pt2 (cadr sel2)
(command "_.line" "_app" pt1 pt2 nil); starts a Line, but quits
(setq intpt (getvar 'lastpoint)); but that starting of a Line establishes the location
And since, somewhere along the way, the INTersection mode got smart enough to operate like APPINT and ask for another pick if there's no intersection within aperture-box range of the first pick, you can do the same with:
(command "_.line" "_int" pt1 pt2 nil)
Either way requires that there be no other intersection or apparent intersection or two intersecting objects within aperture-box range of either point. I avoid that possibility by temporarily setting the APERTURE System Variable equal to the PICKBOX System Variable, because Users will always select objects at unambiguous locations, so if the Aperture is the same size as the Pickbox, there won't be anything else close enough to there to lead Osnap astray.