In university, I learned it to improve my understanding of computer architecture: How exactly does a CPU compute things? How does the CPU interact with the different types of memory, and what are the performance implications?
It's helpful for writing compilers, particularly with optimization.
Enthusiasts enjoy the challenge and efficiency.
Some environments lack compilers and therefore require knowledge of Assembler.
Some say knowing Assembler guides writing more efficient code. For a low-level language like C, that's probably true, at least on a case-by-case basis. For higher-level languages, perhaps less so.
IMO Assembler isn't especially complex, it's just granular; a very tiny tool, best used for tiny jobs.