Question: I mean, if binary code is already generated by PC, wouldn't it be possible to just take this binary code, transfer it to a specific place in flash memory via specific bus, for example Serial Wire, and it would work?

Why is a programmer usually required in an embedded toolchain?

Answer: 
A programmer is the implementation of " via specific bus,".
Some devices have inbuilt bootloaders (may be hardware or software or firmware) that allow the use of a port of some sort to load code.

Whenever a feature is included in a device that is not utilised during normal operation it adds an unproductive overhead. On very large and capable systems this overhead may be small and unimportant. On very small systems it may occupy enough program space or hardware to represent a significant degradation of device capability. When processors get into the cents per unit range every last piece of capability is worth having. (A 2 cent processor that becomes a 3 cent processor due to added little used capabilities may matter. )
The ability to self-program has a number of costs, and generally these costs can be avoided by leaving that ability out:

1. The self-programming MCU can brick itself. Oops...
2. Security: may add a path for a hacker to be able to modify the device's firmware remotely.
3. You have to have an external programming interface to get the initial program in, anyway (though this is built-in for some MCUs).
4. Having to write the software to support self-programming.
5. Communications interface to receive the new program, memory to buffer the new program, battery backup so power won't drop out in the middle of rewriting its flash, any special voltages, write circuitry, again, software to support all this... See @Russell McMahon's answer.
6. Speed of programming: using an external programmer may greatly speed up the programming process, especially if the only usually available communications interface is slow.