You can run 'apt-cache policy puppet' on your trusty nodes. If you have the puppetlabs apt repo enabled you should see many old versions available.
As a last resort, you could install from ruby gems.
As for kernel versioning, if you can express that in a package name you can do it in puppet. Of course kernels are a bit wonky, so you would probably need to enforce a reboot to make sure your change is live on the system. I'm not aware of a good way for puppet to manage rolling reboots through a set of systems, that sounds more like an orchestration task.