- How big of a partition would I need to make on my internal hard drive? ( < 32 GB)
All you would need is to be able to contain the /boot/ directory on the internal HDD in its own partition with an ext4 filesystem.
If you only retain one copy of a kernel version, then 100MB would suffice for this partition for the kernel and grub.
Using another partition on this HDD for swap would be highly recommended, both for system performance and longevity of the SD card.
The size for swap is historically recommended to be one to two times the RAM size.
- Where should I set up my directories between the internal hard drive and the SD card?
This question does not make sense. You already stipulated that you want to "boot up to linux on my internal hard drive, and have the SD card contain everything else. (software, users, system files, repositories, etc.)"
Would "everything else" presumably be the root filesystem?
- Do I need to set up multiple partitions on my SD card for the other directories during linux installation? If yes, how much space for each directory?
No, you do not need to set up multiple partitions, and would be better off keeping things simple.
There really is no "linux installation" as you might be used to for Debian-type distributions.
Instead you could manually construct the rootfs on SD card by simply copying the rootfs of an existing Linux system, and then cleanup pertinent files in /etc/ (e.g. fstab, hostname) and /home/. (Do not copy pseudo-filesystems that are mounted at /sys, /var, and /proc.)
An inactive rootfs would be the ideal source (because no pseudo-filesystems would be mounted); e.g. if the rootfs is an HDD partition, then boot the PC from a LiveCD, manually mount that HDD partition and the SD card, and then copy the HDD partition's files & directories to the SD card.
During boot the rootfs on the SD card would be specified in the kernel command line with parameters such as:
root=/dev/mmcblk0p1 rootwait rootfstype=ext4 rw
which assumes that your SD card has one MBR partition formatted as an ext4 filesystem.
Refer to the kernel parameters documentation for details on these parameters.
Refer to grub documentation on how to edit the kernel command line for the kernel you're trying to boot.
Note that this booting scheme requires that your Linux kernel has the driver for the MMC/SD controller built as a statically-linked driver, i.e. it's a built-in driver.
That configuration is common for embedded Linux, but may be unlikely for an x86 distributition.
If the MMC/SD controller driver is a loadable module, then booting gets complicated (e.g. use an initramfs to make the driver available, and then mount and pivot_root to the rootfs on SD card).
Addendum
I found an old laptop that has a built-in MMC/SD card socket, as well as an old Lubuntu LiveCD. The install menu actually actually offers the SD card (as /dev/mmcblk0) as an installation target device.
So I proceeded to specify the HDD (/dev/sda) as the boot device for installation of grub, a primary partition (/dev/sda1) formatted as ext4 for mounting /boot, and another primary partition (/dev/sda2) for swap. A single primary partition (/dev/mmcblk0p1) on the SD card was formatted as ext4 for mounting / (aka root).
The installation created all the expected directories and stored the expected files in all the expected places on the HDD and SD card. However the boot from HDD stalls, presumably because the kernel cannot access the rootfs on the SD card due to the inaccessible module, mmc_block.ko.
The simplest (IMO) solution would be to rebuild a Linux kernel with the MMC/SD controller driver built-in.