One possible workaround would be to first transform the vectors into Cartesian coordinates, then use standard operations and afterwards to transform them back to spherical ones, if needed. Something like the following.
These two functions make the transformations: toCart - from spherical to Cartesian, while toSph - from Cartesian to spherical:
toCart[a_List] := {a[[1]]*Sin[a[[2]]]*Cos[a[[3]]],
a[[1]]*Sin[a[[2]]]*Sin[a[[3]]], a[[1]]*Cos[a[[2]]]};
toSph[r_List] := {Sqrt[r[[1]]^2 + r[[2]]^2 + r[[3]]^2],
ArcCos[r[[3]]/Sqrt[r[[1]]^2 + r[[2]]^2 + r[[3]]^2]],
ArcSin[r[[2]]/Sqrt[r[[1]]^2 + r[[2]]^2]]};
Consider, for example, two vectors u and v given in spherical coordinates:
u = {1., \[Pi]/6, \[Pi]/4};
v = {2., \[Pi]/3, \[Pi]/2};
Let us transform them into Cartesian ones and call their Cartesian versions u1 and v1
u1 = toCart[u]
v1 = toCart[v]
(* {0.353553, 0.353553, 0.866025} *)
(* {0., 1.73205, 1.} *)
Now here is their scalar product:
u1.v1
1.4784
And this is the cross product transformed into the spherical coordinates:
Cross[u1, v1] // toSph
(* {1.34697, 1.09884, -0.299137} *)