Here are some possible parts of the solution. At each stage, there are different options that will depend on Ncluster, on how fast the data changes, and what you want to do with the tools.
3 stages: quantize, field, K-means.
1) quantize: reduce the input coordinates of XYZ to say 8 bits each, taking 2 ^ 8 percentiles of X, Y, Z separately. This will accelerate the entire flow without significant loss of detail. You can sort all 1G points or just random 1M, to get 8-bit x0 <x1 <... x256, y0 <y1 <... y256, z0 <z1 <... z256 with 2 ^ (30-8) points in each range. To display float X -> 8 bits x, the expanded binary search is fast - see Bentley, Pearls p. 95.
Added: Kd trees split any point cloud into boxes of different sizes, each with ~ Leafsize points; much better than XYZ splitting as stated above. But afaik you will need to collapse your own Kd tree code to split only the first, say, 16M-boxes, and save only the score, not the points.
2): count the number of points in each rectangle, [xj .. xj + 1, yj .. yj + 1, zj .. zj + 1]. The average square will have 2 ^ (30-3 * 8) points; the distribution will depend on how complex the data is. If some boxes are too big or too many points, you can a) divide them by 8, b) track the center of the points in each field, in other cases they simply take the midpoints.
3) K-means clustering on the centers of the boxes 2 ^ (3 * 8). (Google parallel “k means” → 121k hits.) It depends a lot on K aka Ncluster, also on your radius R. A rough approach would be to heap say 27 * Ncluster boxes with the most points, then take the largest ones subject to limitation radius. (I like to start with the Minimum spanning tree , then delete the longest K-1 links to get K-clusters.) See also Color quantization .
I would make Nbit, here is 8, a parameter from the very beginning.
What is your Ncluster?
Added: if your glasses move on time, see collision-detection-of-huge-number-of-circles on SO.