Checked Exceptions são usadas quando o desenvolvedor prevê o erro e sabe como contorna-lo (por isso o compilador segura o código enquanto o erro não for tratado).
Unchecked Exceptions são usadas quando o desenvolvedor não tem como contornar o erro ou por um desenvolvedor preguiçoso que deveria ter usado uma checked exception. É isso? :)