Yup, this is a known shortcoming of cpusets in the legacy hierarchy. If you use the unified hierarchy, the cores can be automatically re-inserted when they come back up, however the unified hierarchy brings other problems which we're not entirely ready to deal with yet.
For now, if you do a lot of hotplugging, you'll either need to not use the cpuset controller (use lxc.cgroup.use to control this), or you can use an external daemon to continually re-balance the containers among cpus, as lxd does.

