I think what you describe is possible.
You can have Bundle A exposing service A, and using service B; and Bundle B exposing service B and using service A.
This will work if one of the service import is declared as optional, so that, when you deploy the bundles on the platform, the dependency constraints can be resolved.
The spring dm files will look like :
Bundle A file :
Bundle B file :
<bean name="A" class="ServiceA">
<property name="b" ref="serviceB">
<osgi:reference interface="IServiceB" id="serviceB" cardinality="0..1"/>
<osgi:service interface="IServiceA" ref="A"/>
In this case, you need to start Bundle A before Bundle B. The reference to service B being optional, bundle A will be able to start, and then, Bundle B will be able to start also (as service A is available).
<bean name="B" class="ServiceB">
<property name="a" ref="serviceA">
<osgi:reference interface="IServiceA" id="serviceA"/>
<osgi:service interface="IServiceB" ref="B"/>
Hope this helped.