For the case with conditional associations, where the joined tables are not known in design time but only during runtime, it is indeed better not to define any relationships in the designer but use appropriate Linq queries (with joins) to combine data from different tables.
For self-referencing associations, there should be no problem to define them in the model directly. This way you will take advantage of the generated navigational properties and will be able to access more easily the referenced objects.
Hope that helps.
OpenAccess ORM Q2 2013 brings you a more powerful code generation and a unique Bulk Operations support with LINQ syntax. Check out the list of new functionality and improvements shipped with this release.