Your thinking is wrong. :)
All that a "core" in bhyve means is that you're running a kernel thread to simulate a core. If you have 4 "cores" you're running 4 threads. The kernel can obviously accommodate far more threads than it has physical cores, which is basically the scheduler's whole job. It's not a "hard mapping" in other words, it's more of a soft limit, the same as for "memory size". Remember, these are virtual machines, folks! You're basically just setting resource limits, and if you have 8 more or less idle VMs with "4 cores each" on a 4 core machine, fine. It's more about the aggregate CPU load on the host than anything else. Memory is also allocated on-demand, so if the VM doesn't touch all of its virtual pages, it's not going to fault in and allocate the entire "memory size" you allocated to it, either.