Isso é abordado em detalhes em o wiki do Ubuntu ; Resumirei aqui.
Com relação à primeira parte da sua pergunta, os kernels do Ubuntu configuram a configuração apropriada para garantir que apt autoremove
não removerá o kernel em execução (e o mais recente, e um kernel de backup); para que você possa remover todos os kernels obsoletos marcando-os como instalados automaticamente (caso eles tenham perdido o marcador):
sudo apt-mark auto '^linux-image-[34].*'
(isso produzirá avisos para todos os pacotes do kernel que não estão instalados, mas eles poderão ser ignorados) e, em seguida, removerá os pacotes obsoletos:
sudo apt autoremove
Os cabeçalhos do kernel também são seguros para apagar, e são protegidos pela mesma configuração das imagens do kernel, então a mesma receita se aplica:
sudo apt-mark auto '^linux-headers-[34].*'
sudo apt autoremove