you could start with a simple hack of your code to extract the intersections;
Something like
{x1, y1} = Transpose[line];
{x2, y2} = Transpose[RotateLeft[line]];
gr2 = {(x1^2 - x1*x2 + y1*(-y1 + y2)), (y1 - y2)} // Transpose // Most;
which can be encapsulated in the ellipseSimLowLevel as follows
ellipseSimLowLevel[ellPos_, θ_, aimAt_, refls_, ella_, ellb_, showFocii_] :=
Module[{sph = Circle[{0, 0}, 1.], pt, rhat, nfact = .5, ab,
pr = 1.5, line, gr, fdist, focii, ellX, x1, y1, x2, y2, gr2},
ab = {ella, ellb};
ellX = ella*clamp[ellPos, -1, 1];
pt = {ellX, ellipseY[ellX, ab]};
fdist = focalRadius[ella, ellb];
focii =
If[ella >
ellb, {{-fdist, 0}, {fdist, 0}}, {{0, -fdist}, {0, fdist}}];
rhat =
Switch[aimAt, "f1", unit[focii[[1]] - pt], "f2",
unit[focii[[2]] - pt], _,(*-r2d[θ Degree].normEllipse[pt,
ab]*)r2d[θ Degree].{0, -1}];
line = getEllipseRefls[pt, rhat, ab, refls][[All, 1]];
gr = {{Scale[sph, ab, {0, 0}]}, {Black, Line[line],
PointSize[Medium], Point[line]},
{PointSize[Large], Red, Thickness[Large],
Arrow[{pt - nfact*rhat, pt}]},
If[showFocii, {PointSize[Large], Blue, Point[focii]}, {}]};
gr = Graphics[gr, Frame -> True, AspectRatio -> Automatic,
ImageSize -> {450, 450}, PlotRange -> {{-pr, pr}, {-pr, pr}}];
(* NEW PART *)
{x1, y1} = Transpose[line];
{x2, y2} = Transpose[RotateLeft[line]];
gr2 = {(x1^2 - x1*x2 + y1*(-y1 + y2)), (y1 - y2)} // Transpose // Most;
gr2 = Graphics[Map[Point, gr2], Frame -> True, AspectRatio -> 1,
ImageSize -> {450, 450}];
Row@{gr, gr2}
(* END OF NEW PART *)
];
Then the above Manipulate produces

or

or
