Tomaré esta pregunta desde el punto de vista de modelado.
Mientras no agregue ninguna relación que no esté realmente allí, estará a salvo. Si los agrega, obtendrá menos integridad en los datos (porque hay redundancia) y un código más estrechamente acoplado.
Lo que ocurre específicamente con las referencias circulares es que no he visto un caso en el que realmente se necesiten, excepto una: auto referencia. Si modela árboles o gráficos, lo necesita y está perfectamente bien porque la autorreferencia es inofensiva desde el punto de vista de la calidad del código (no se agrega dependencia).
Creo que en el momento en que comienza a necesitar una referencia que no sea de uno mismo, inmediatamente debe preguntar si no puede modelarla como un gráfico (contraiga las múltiples entidades en un solo nodo). Tal vez hay un caso intermedio en el que haces una referencia circular pero modelarlo como gráfico no es apropiado, pero lo dudo mucho.
Existe el peligro de que las personas piensen que necesitan una referencia circular, pero de hecho no la necesitan. El caso más común es "El caso uno de muchos". Por ejemplo, tiene un cliente con varias direcciones, desde el cual se debe marcar como la dirección principal. Es muy tentador modelar esta situación como dos relaciones separadas has_address y is_primary_address_of pero no es correcto. La razón es que ser la dirección principal no es una relación separada entre usuarios y direcciones, sino que es un atributo de la relación que tiene dirección. ¿Porqué es eso? Porque su dominio está limitado a las direcciones del usuario y no a todas las direcciones que hay. Elija uno de los enlaces y márquelo como el más fuerte (primario).
(Ahora vamos a hablar sobre bases de datos) Muchas personas optan por la solución de dos relaciones porque entienden que "primario" es un puntero único y una clave externa es una especie de puntero. Entonces, la clave externa debería ser lo que hay que usar, ¿verdad? Incorrecto. Las claves foráneas representan relaciones, pero "primario" no es una relación. Es un caso degenerado de un orden donde un elemento está por encima de todo y el resto no está ordenado. Si necesita modelar un orden total, por supuesto lo consideraría como un atributo de la relación porque básicamente no hay otra opción. Pero en el momento en que lo degeneras, hay una opción y una muy horrible: modelar algo que no es una relación como una relación. Así que aquí viene: redundancia en las relaciones que ciertamente no es algo que deba subestimarse.
Por lo tanto, no permitiría que ocurriera una referencia circular a menos que sea absolutamente claro que proviene de lo que estoy modelando.
(nota: esto está ligeramente sesgado al diseño de la base de datos, pero apuesto a que también es bastante aplicable a otras áreas)