Alex,
This is possible, but here is how we are doing it. We have a generic rules engine where we use defined prefetch paths to graph an entity. The reason we used this approach is to avoid circular references. Additionally we had to define the starting point of the entity and for this we stored this information in a table so that only certain entities would be available.
Once it hits this generic method it will load up the appropriate prefetch path which in turn gives us the cleanest graph of the entity without the risk of running into circular references. Once you hit a circular reference you will run out of memory or very close to it.
The alternative to this method was to get all relations and then put in special cases that would attempt to catch every instance of a circular reference and then skip that particular relationship. This approach was abandoned in lieu of using prefetch paths.
I can give you more details on this approach if necessary, but it is possible and we are using it today.
Best,
jon