If you've ever partitioned a disk, you might know how one partition can fill up, even though the disk itself has plenty of space. This is one of the drawbacks to partitioning.
Well, Android partitions the disk, and then mounts the data partition onto the filesystem so that it all looks like one disk. The data partition is usually called, confusingly, "sdcard" (the reason for the name is another story). This partition is mounted on the directory "/mnt/sdcard". The size is fixed by the manufacturer, and can't be easily changed. It would require root access, and a program to resize partitions.
Recent versions of Android allow programs to store parts of themselves on the sdcard (named "extsdcard") if you have one. I don't know why you can't use the data partition instead, but apparently you can't do it this way.
The result of all this is that without root access and knowledge of disk partitioning and the Android filesystem, there's not much you can do except delete what you don't really need.