Provo a dirlo in modo semplice:
Una ROM sarebbe considerata il sistema operativo completo (pensate a MS Windows, Mac OSX) - in questo caso una versione del sistema operativo Android. Tutti questi sistemi operativi hanno una sezione di codice che si chiama kernel. Il kernel è responsabile di numerose cose all'interno del sistema operativo, soprattutto della distribuzione delle capacità di elaborazione tra i programmi (schedulazione).
Quando si parla di "custom"-ROM o kernel all'interno della comunità Android, la gente si riferisce a pacchetti software completi (Cyanogenmod, ParanoidAndroid ecc) o kernel che sono software aftermarket e non spediti dal produttore. Un kernel personalizzato sarebbe solo quella sezione del sistema operativo che gestisce la programmazione ecc. Entrambe queste cose sono in contrasto con "Android stock", che è quello che viene fornito sui rispettivi dispositivi Android.
È possibile flashare (installare) un kernel personalizzato su una ROM stock per migliorare potenzialmente le prestazioni/la durata della batteria ecc, a seconda di ciò che la persona che ha sviluppato tale kernel sta cercando di ottenere con esso (cioè una programmazione più aggressiva, overclocking, undervolting ecc)
Spero che questo ti chiarisca le cose.