Am I understanding the ballooning part right that this doesn't allocate all of the VM memory from the host until it's needed, and releases memory automatically when it's not needed anymore? So you can overprovision memory with multiple guests as long as the guests aren't using the memory at the same time?

Yes, it requires a daemon running inside the VM and can be finicky though.