What is scripting used for in the Blender Game Engine?

Can anything be done without scripting as well like mouse look?

Well, scripting is used to do complex things that you would either have trouble doing, or would be unable to do with logic bricks. An example would be that you can’t, for example, get the closest object to the player without using Python. Mouse-look (true, accurate mouse-look) can only be done with Python.

Scripting is a way to extent blender without diving into the source code.
Blender’s python API can add UI elements, add mesh types, and add logic for game engines.

If you try to make a game in blender using only the logic bricks, you find quickly that even “simple” things become rather hard. This isn’t a problem with the logic system (ok, it could be better, but I quite like it), but rather the complexity of the “simple” task.
So we use Python. Python gives game developers access to things in the game engine that can’t be accessed by the logic bricks. Things like object’s rotations, positions, parents, physics properties (mass), colour, textures, and so on.

While you can do some stuff with just logic bricks (I think someone is developing a mouse-look actuator) it is generally best to program these things yourself. Pre-set logic bricks have only so much ability.