Well geometry in Dynamo isn’t necessarily a bad thing if that’s what you mean, it just depends on where it came from. If for example you extract solids or other geometry from a Revit element using Dynamo nodes, and then perform an intersection test on that geometry this is really bad and will scale horribly to the point where it becomes unusable.
So keeping on topic with Python scripts; in scenarios where you have a workflow which involves an unavoidable mix of Dynamo geometry and Revit elements (like the OP) then your first objective should be to transfer everything to the Revit API context at the entry point to your mainline function and only make calls to the Revit API from that point on.
You can obtain the bounding box of a Revit element with virtually no overhead using the Revit API (even the Dynamo node Element.BoundingBox is performant) - but what you should avoid is doing anything weird like extracting the geometry from an Element to get its bounding box, as this will render the performance advantages bounding boxes offer useless.
If you are using nodes (visual programming) to perform intersection operations then this will always be difficult to manage due to the way graphs execute as it carries huge memory penalties; it just isn’t the right tool for the job, whereas scripting (Python or C#) is.
Lastly you can intersect lines with elements but to do this even using the Revit API will require extracting the solid geometry. It wont provide any advantages over say, the ElementIntersectsElementFilter for example, if anything it would actually take longer. Basically you need to forget Dynamo workflows (without packages ) if you need to perform intersection tests on Revit Elements as this will invariably involve geometry extraction using Dynamo’s geometry library which is a futile endeavour; instead, focus on what the Revit API has to offer, such as the ElementIntersectsElementFilter, as this doesn’t need expensive geometry extraction to work and it can be optimised (like what BimorphNodes does) using bounding box quick filters to get surrounding elements and reduce the number of elements in an intersection test.