で、自分で例外クラスを作る場合というのは、
標準のライブラリで用意されていないが、エラーとして処理をしたいロジックがある場合などに作成する。
自分でユーザー認証の仕組みを作って、認証失敗時はエラーとして処理をしたい、というような場合とか。

java.lang.Exceptionではなく、他の例外クラスを継承しても問題ないというのはたまたまだと思っていい。
is-a の関係の話をしたが、
CarExceptionE→(継承)→java.lang.Exception だが、
「他の例外クラス」もjava.lang.Exceptionを継承しているだろうから
CarExceptionE→(継承)→「他の例外クラス」→(継承)→java.lang.Exception というわけで
元をたどればどちらの場合も java.lang.Exception を継承している。
しかし、後者の場合だとCarExceptionEは「他の例外クラス」としても扱えてしまうので
「他の例外クラス」とCarExceptionEを別々にcatchして処理を分けたい場合はちょっと困るかもしれない。