Você está correto, não é certo lançar uma exceção e deixar que ela quebre a execução do programa.
O ponto é que a exceção deve ser tratada, só não dentro do método que levantou a exceção.
Isso é útil para que você possa deixar cada método somente com a sua responsabilidade, inclusive unificar o tratamento de exceções.
E algumas vezes os frameworks já disponibilizam algum tratamento padrão para exceções. Nos frameworks web, como vraptor, spring ou asp.net, quando ocorre uma exceção é gerada uma página com um código 500 no navegador do usuário.
Mas a execução do seu serviço contínua, afinal o erro foi tratado pelo servidor.
De toda forma a ideia não é deixar a exceção lançada sem tratamento, ela deve ser tratada num momento apropriado.