Based on the data you provide, it seems that hierarchical clustering (see [wiki][1] here) with type "agglomerate" (bottom up) solves your problem, i.e.:

    out = FindClusters[data, 6, Method -> "Agglomerate"];
    ListPointPlot3D[out]

and get:

![enter image description here][2]

Based on how your full dataset looks like (e.g. if you know how many clusters there are etc.), you might need to adapt the code a bit (possibly also with distance function or matrix) - but for the sample you are providing, it seems to work nicely. Also, performance **could** be an issue, as noted in the wiki article.


  [1]: http://en.wikipedia.org/wiki/Hierarchical_clustering
  [2]: https://i.sstatic.net/GMEwl.jpg