Lo que viene a continuación es solo un concepto y no estoy seguro de si funcionaría, pero me resultó interesante pensar al respecto.
¿Tienes acceso a una base de datos de Oracle con Spatial? Si el trabajo es único y no cuentas con Oracle "en la empresa", tal vez podrías usar la máquina virtual de desarrollo de Oracle (http://www.oracle.com/technetwork/community/developer-vm/index.html) con todos los componentes ya instalados y listos para usar. No estoy seguro sobre las licencias, tendrías que verificarlo.
De todos modos, asumiendo que los puntos están en la tabla de PUNTOS y las líneas en la tabla de LÍNEAS, y ambas tablas tienen columnas ID y GEOM, la siguiente consulta debería devolver pares de puntos paralelos a las líneas grises, junto con la distancia entre los puntos.
select A.id, B.id, sdo_geom.sdo_distance(A.geom, B.geom, :T) as pts_dist
from points A, points B, lines L
where A.id <> B.id
and sdo_geom.sdo_distance(A.geom, L.geom, :T) = sdo_geom.sdo_distance(B.geom, L.geom, :T)
and sdo_geom.sdo_distance(A.geom, L.geom, :T) < :X
and not exists
(select 1 from lines L1
where sdo_geom.relate(L1.geom, 'ANYINTERACT',
mdsys.sdo_geometry(/* parámetros para crear una línea entre A y B */), :T)) = 'TRUE')
No lo he probado en absoluto. El resultado aún tendría que ser procesado, porque obtendrías: a) dos enlaces para cada par de puntos, de A a B y de B a A; b) si hay 3 o más puntos a lo largo de una línea gris, obtendrías enlaces entre todos ellos - creo que la solución sería, para el punto dado A, elegir el enlace más corto desde este punto e ignorar/eliminar el resto (para eso sirve la distancia en el resultado).
Los parámetros utilizados en esta consulta: T - tolerancia (por ejemplo, 0.005); X - la distancia máxima entre el punto y la línea gris - los puntos paralelos posicionados demasiado lejos de la línea gris no se tendrían en cuenta (para esta línea).
La consulta podría cambiarse para comparar la distancia de A desde la línea y la distancia de B desde la línea con un "margen de error", de modo que si dos puntos son "casi" paralelos, igual se tendrían en cuenta en el resultado.
Probablemente la consulta no sea óptima y podría tardar bastante en ejecutarse. Pero, nuevamente, es solo un concepto y si decides probarlo, estoy seguro de que hay mucho por hacer.