To move an app to the SD card, the app has to be written to be able to run on the SD card. (You don't need root access.) Since a) many apps today aren't actually written (they're drag & drop to a "skeleton app", so you can make it look like your app without actually knowing how to write an app, b) many types of apps (like widgets, for example) can't run from the SD card and c) the "skeleton" can be used to create any type of app, any app created that way can't be moved to the SD card.
Some apps that can be can only have parts moved. If the part is smaller than the smallest storage "chunk" (things are stored in fixed-size chunks), that part is moved to the card, but a pointer to it has to be put into internal storage (because that's where Android expects to find it), so you haven't saved any space.
Android was designed to use the SD card to store files - videos, songs, etc., not to run apps from. (There are some tricks to make the phone use the SD card instead of the internal storage [it's all or nothing - either internal or external], but if you don't already know how they work and how to use them, I wouldn't suggest experimenting. It's an easy way to brick your phone.)