There are many "*2SD" methods, and they generally involve root access.
My personal favorite is Link2SD. It uses symlinks, which take up (practically) no space. The actual program, data, libraries, etc are stored on a second partition on your SD card. This comes with the downside of actually having to create two partitions on your SD card (meaning it will have to be formatted).
If you have root, you likely have a custom recovery installed that can automatically partition your SD card.
The upside of multiple partitions is that you can mount your sd card when plugged into a computer without causing the apps to disappear from your device. This is because only one partition is actually unmounted from android and mounted on the computer, and the other partition holding your apps is never unmounted.