; は主にそのコマンドが終わるまで次の作業に動かしたくない時に使います。 | パイプとの違いは結果は次のコマンドには引き渡さないところです。
echo hogehoge; echo hogehoge; といったような場合は最初の hogehoge の表示が終わってから次の hogehoge を表示するといったような感じです。
( ) はその中の作業を一つの纏まった作業として考えるときに使えると思います
( echo hogehoge echo hogehoge ) | telenet
の場合は telnet の結果をまとめて2つのエコーに引き渡すといったような感じです。