For graph databases ... I would consider looking at Titan for scalability. https://github.com/thinkaurelius/titan.
They wrote a good blog post recently about how their database engine stores data for scaling/performance: http://thinkaurelius.com/2013/11/01/a-letter-regarding-native-graph-databases/
Titan also can be configured to work hand in hand with Cassandra, so you get the benefit of a columnar database as well.
I think you hit the nail on the head with your understanding of relationships (one entity relating to another) and scalability.
The more "joins" or "connections" you have to manage, the harder it is to scale.
Key/value systems assume you will relate data in your application. There are no concepts of queries, so to scale, you can shard based on the key. Pretty easy and very scalable.
If you read some of the articles about Titan it's easy to see why it's hard to scale something like a graph database.