It took a while from the first time I saw this question, but only because I only realized now that I had eventually built all the tools I thought I needed. Thus, this will link to a lot of my previous answers.
First, I'll use the Lloyd algorithm to generate a bunch of equidistributed points:
n = 50; (* number of points *)
BlockRandom[SeedRandom[1337, Method -> "MersenneTwister"];
sp = Normalize /@ RandomVariate[NormalDistribution[], {n, 3}]];
With[{maxit = 45, (* maximum iterations *)
tol = 0.001 (* distance tolerance *)},
lp = FixedPoint[Function[pts,
Block[{ch, polys, verts, vor},
ch = ConvexHullMesh[pts];
verts = MeshCoordinates[ch];
polys = First /@ MeshCells[ch, 2];
vor = Normalize[Cross[verts[[#2]] - verts[[#1]],
verts[[#3]] - verts[[#1]]]] &
@@@ polys;
SphericalPolygonCentroid[vor[[#]]] & /@
ch["VertexFaceConnectivity"]]], sp, maxit,
SameTest -> (Max[MapThread[cosDistance, {#1, #2}]] < tol &)]];
(The associated auxiliary routines will lengthen this answer, so just refer to my previous answer to get them.)
From these points, generate the convex hull and extract the corresponding points and edges:
ch = ConvexHullMesh[lp];
pts = MeshCoordinates[ch];
edges = First /@ MeshCells[ch, 1];
Finally, to render the picture, we need two NURBS-based primitives:
(* https://mathematica.stackexchange.com/a/10994 *)
arc[center_?VectorQ, {start_?VectorQ, end_?VectorQ}] := Module[{ang, co, r},
ang = VectorAngle[start - center, end - center];
co = Cos[ang/2]; r = EuclideanDistance[center, start];
BSplineCurve[{start, center + r/co Normalize[(start + end)/2 - center], end},
SplineDegree -> 2, SplineKnots -> {0, 0, 0, 1, 1, 1},
SplineWeights -> {1, co, 1}]]
(* https://mathematica.stackexchange.com/a/128496 *)
sphericalCap[{θ_, φ_}, α_] := With[{c = Cos[α/2]},
Style[BSplineSurface[Map[RotationTransform[{{0, 0, 1},
Append[{Cos[θ], Sin[θ]} Sin[φ], Cos[φ]]}],
Map[Function[pt, Append[#1 pt, #2]],
{{1, 0}, {1, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {1, -1}, {1, 0}}] & @@@
{{0, 1}, {Sin[α/2]/c, 1}, {Sin[α], Cos[α]}}],
SplineClosed -> {False, True}, SplineDegree -> 2,
SplineKnots -> {{0, 0, 0, 1, 1, 1},
{0, 0, 0, 1/4, 1/2, 1/2, 3/4, 1, 1, 1}},
SplineWeights -> Outer[Times, {1, c, 1}, {1, 1/2, 1/2, 1, 1/2, 1/2, 1}]],
BSplineSurface3DBoxOptions -> {Method -> {"SplinePoints" -> 25}}]]
Now, generate the picture:
Graphics3D[{{ColorData["Legacy", "Honeydew"],
Tube[arc[{0, 0, 0}, 0.98 pts[[#]]], 1/150] & /@ edges},
{ColorData["Legacy", "ForestGreen"], Glow[ColorData["Legacy", "Chartreuse"]],
EdgeForm[Directive[AbsoluteThickness[1/4],
ColorData["Legacy", "CobaltGreen"]]],
sphericalCap[{ArcTan @@ Most[#], ArcCos[Last[#]/Norm[#]]}, π/60] & /@ pts}},
Background -> ColorData["Legacy", "Gainsboro"],
Boxed -> False, Lighting -> "Neutral"]