Question: At the professional level, for what purpose is reverse software engineering used? What software is targeted and why?

For reasonably complex compiled code that's doing something novel, making meaningful insights into how that code operates via reverse engineering seems like it would be enormously intensive of expertise, labor, and time. In particular, I imagine that hiring competent assembly programmers is extremely difficult and possibly expensive. And yet, I haven't the foggiest idea where entities with the resources to do so would want to spend those resources.

This is my list of possibilities...

1. Writing malware
2. Writing counter-malware
3. Maybe analyzing competitors products?

It's not a great list. What is the reality here? What sort of software justifies the expense to be reverse engineered?

*See the comments on 0xC0000022L's answer for some refinement of the question.*

Answer: 
4. Finding undocumented features of a product.

	* for instance for locating a registry key or setting to turn on a debug mode.
5. Finding how exactly a poorly documented feature works.
6. Debugging

	* sometimes i find myself loading my own software in IDA to find what code the compiler produced, either to find bugs, or to see how an optimization worked out.
7. Cracking copy protection

	* keygens are usually created by reverse engineering an application's licensekey validation algorithm.
	* sometimes a company may have lost licene codes to some ancient piece of software.
8. Evaluating the security of a closed source product.
9. Modify an existing product

	* like flashing your own custom rom to a phone.
10. Interface current products with ancient software.
13. Writing cheats for games.
14. Writing an anti-cheat for games.
15. Looking for badly written code to exploit or to fix and patch it.