Why it is a bunch of string? no idea, seems to be an error. Why it returns a list of lists is quite logical. The reason is that you will always get a list of lists of numbers, so whatever you do after with it, you don't have to make constructs like this all the time:
If[Depth[list]==2, ......... , If[Depth[list]==3, ....] ]
It is the same for Solve: it will always give back a list of lists. Such that you don't have to check for the Depth all the time so that everything works coherently together...