Обычно выброс ошибки используется в базовых вещах, что способствует исключению ошибок в дальнейшей разработке, так как при тестировании вы заранее будете оповещены что сделали что-то не так.

Код AS3:
function configureSomething (intializer: Object) : void {
if (!initializer) throw new ArgumentError("Передаваемый аргумент не может быть null");
if (initializer is XML) {
...
} else if (initializer is String && isValidURL(initializer as String) {
} else {
throw new ArgumentError("Объектом инициализации может служить только URL или XML");
}
}
Конечно же это не единственный случай применения.
А конструкцию try catch надо использовать там, где это уместно. Единственная ситуация в которой мне действительно приходилось её использовать, то есть в этом была необходимость, это при использовании getDefinitionByName и т.п. функции которые выбрасывают RTE.