Based on the data you provide, it seems that hierarchical clustering (see wiki here) with type "agglomerate" (bottom up) solves your problem, i.e.:
out = FindClusters[data, 6, Method -> "Agglomerate"];
ListPointPlot3D[out]
and get:
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.