Not necessarily: ranges like 1:10 are mutable immutable AbstractVectors, as are SVectors from StaticArrays.jl and many other examples.
I think the main technical reason that AbstractString is not a subtype of AbstractVector is that the indices of a String are not necessarily consecutive, and in consequence there is no O(1) algorithm to “give me the n-th character of a string” (str[nextind(str, 0, n)] in Julia).
Conceptually, however, one rarely views a String as a collection of characters, in part because the concept of a “character” is itself ambiguous in Unicode. For example, "no\u00EBl"== "noël" and "noe\u0308l" == "noël" are canonically equivalent strings in Unicode, but the former has length 5 and the latter has length 4 (i.e., different numbers of codepoints, depending on whether a combining character is used to make the ë). For a similar reason, it’s not generally useful to ask for the “n-th character of a string” where n is chosen at random.
(It is useful to be able to read from an index that was located previously, e.g. by a find function, but in that case the index is just an arbitrary position indicator in the string and you don’t care how many characters it corresponds to.)
(Conversely, codeunits(str) for a string str does give a subtype of AbstractVector, but the elements of this array are not characters, but rather the elementary units of the unicode encoding of the string—bytes, for String with its UTF-8 encoding.)