The SPI layer seems intended purely for a clean separation of server and client layers in server type scenario.
The initial intent was to separate the transient layer from the persistence layer. That way 'legacy' repositories can implement the SPI (interface in the jackrabbit-spi module) and reuse jackrabbit-jcr2spi in order to expose a JCR API.
Here's a link to one of my threads that, while a bit overwhelming in the scope of topics it touches on, does contain some useful information. BTW, I'm in the middle of this right now. So, I'd love to share any insights as you move along.
Thomas added some info to the Jackrabbit Wiki [1] today which explains how to do remoting with spi2davex (requires Jackrabbit 2).
[1] http://wiki.apache.org/jackrabbit/RemoteAccess Michael
