Alright a small addition;
Unfortunately I need my phone tonight and tomorrow so I can't mess around with it, so I'll leave you some things to look at and maybe they can help us further.
I've been digging through the filesystem and found partition specification files in /sys/block/mmcblk0/ and sys/devices/mmcblk0. It are directories that contain the classification of devices.
I pulled them to take a closer look and what I found was rather interesting.
It contains 3 folders, one for each partition. Inside those folders are the specifications for the partition. Let me tell you that I'm not sure how Android treats these files (ergo; are they static and loaded on reboot, causing the revert of the partitions - or dynamic and created somehow else).
Here's a quick rundown of the files, I'll use mmcblk0p2 because that's the internal memory, same logic applies to mmcblk0p1 and 3:
-r--r--r-- 1 root root 4096 Oct 22 18:52 alignment_offset
-r--r--r-- 1 root root 4096 Oct 22 18:52 dev
-r--r--r-- 1 root root 4096 Oct 22 18:52 discard_alignment
drwxr-xr-x 2 root root 0 Oct 22 18:52 holders
-r--r--r-- 1 root root 4096 Oct 22 18:52 inflight
-r--r--r-- 1 root root 4096 Oct 22 18:52 partition
-r--r--r-- 1 root root 4096 Oct 22 18:52 partition_name
drwxr-xr-x 2 root root 0 Oct 22 18:52 power
-r--r--r-- 1 root root 4096 Oct 22 18:52 size
-r--r--r-- 1 root root 4096 Oct 22 18:52 start
-r--r--r-- 1 root root 4096 Oct 22 18:52 stat
lrwxrwxrwx 1 root root 0 Oct 22 18:52 subsystem -> ../../../../../../../../../class/block
-rw-r--r-- 1 root root 4096 Oct 22 18:52 uevent
There's a start and size file. The size file contents are:
2097152 is equal to 1GB, it is the sector size. Multiplying this value by 2 would set the size to 2GB.
If that is done, I would assume that the value mmcblk0p3/start has to be shifted by 2097152 and the size reduced by 2097152, if that makes sense to you.
There's also a weird symlink to a subsystem, /class/block, of which I can list and cat its contents but I have no idea how to access it properly, can't cp it either. Looks like Android protects this area somehow. Basically it contains copies (or originals?!!) of the files in /sys/block.
I know that in the Linux kernel all three classification directories (sys/block, sys/class, sys/bus) are merged into one place at /sys/subsystem, following the layout of the bus directories. All buses and classes, including the converted block subsystem, will show up there. But unfortunately my knowledge of the Android kernel is far too limited to know what exactly is going on.
So maybe changing the contents of all these files and then using parted to partition the partitions, making them exactly the same as the values that these files imply, could make the changes the the internal memory stick.
Once again, if anyone has another idea, please let us know.