You really don't want to create a cycle. Maya's not just being arbitrary about hating cycles - it's not architecturally set up for bidirectional data flow like that -- the A in DAG is 'acyclic'. There is no natural way for Maya to avoid continuously re-updating the DAG graph when inputs change and then dirty themselves - which would either make your scene become extremely sluggish or force it to become history dependent (like a cloth or physics sim is). If you look at the graph flow for regular constraints you'll see that it's always unidirectional. It is possible to create situations that are formally cyclical but harmless -- message connections, for example, sometimes fool Maya into thinking you've created a cycle but because they don't actually pass changing data they are harmless. But in general, cycles should be avoided.
You can avoid cycle by caching the original relationship, but keeping it as a cache -- that is, by designing it so you can't drive the contents of the cache with incoming connections. Your node can then do whatever it likes with the cached data without angering Maya. If you did this with a custom node plugin you'd just make sure that the cache data attibutes were not writable, preventing any cheating. The limitation here is that the cached data is not going to be dynamic -- it will reflect the state at the time you set up the relationship -- but after that it's passive data, a 'leaf' in the DAG graph with no upstream connections. You could add tooling to edit that cache -- but if you try to drive the cache with an input connection you've just replicated the problem. This is roughly the way that dynamics systems work -- there is an initial state and then the state can be advanced or rewound. However the initial state itself can't be animated.
The other way to do this is to bypass the dag completely. You can use a scriptJob (or an api message hook) to force the effect you want on every frame update. This is not going to be very performant in the Maya UI and it will be history dependent (if you do something like this you'll need to cache the initial state of the scene and reset to it when the user scrubs back to time zero ). This kind of setup is sometimes unavoidable for very complex behavior but it's also no fun to work with and is prone to blowups. Use only when nothing else works.
In general, Maya just plain hates bidirectional relationships. You might want to check out the ExoSwitch plugin, which claims to be a "bidirectional constraint" -- it's probably doing a bunch of session time caching but it might give you an idea about what the behavior is possible.