Sure. 
What you are interested in is actually the orientation of the vectors with respect to one another; that is, you want to know if, given vectors 1 and 2, does vector 2 lie to the left or the right of vector 1? If it’s to the left, you consider the angle between them to be positive, and contrarily, if it is to the right, you consider the angle to be negative.
Crossing the vectors is one way to determine this, but you have to project the vectors onto some plane of reference first. Let’s say you have the two vectors v1 = (1,0,0) and v2 = (0,1,0). It’s obvious to everyone that the angle between them is positive 90 degrees because v2 is “to the left” of v1, right? But that’s only when viewing their projection onto the z-plane, i.e. dropping their z-coordinate and considering only (1,0) and (0,1). If viewed from the y-plane, the angle stops making sense at all because one of the vectors becomes the zero-vector.
So, before you do any kind of testing to determine their orientation with respect to one another, you have to decide on some plane of reference within which their angles are to count. Let’s say I decide to perform this test with their projections onto the z-plane. Then, calculate the cross product. If the cross product’s z value is positive, it means the angle between them is positive as well. If the cross product is negative, it means the angle is negative. Consider this piece of code:
Vector3 v1 = new Vector3(1, 0, 0);
Vector3 v2 = new Vector3(0, 1, 0);
private void Start()
{
int sign = Vector3.Cross(v1, v2).z < 0 ? -1 : 1;
Debug.Log(sign * Vector3.Angle(v1, v2));
}
This prints 90, and -90 if you swap the two vectors. Make sense?