As a hobbyist with limited and non-professional experience, let me make an attempt to put it in more beginner's terms to help you understand what the boot loader is.
A boot-loader is a start-up program that can load another program or run a previously loaded program.
UNO, Arduino NANO, ATTiny, 8080, 6502 whatever Microprocessor/MCU, doesn't matter. When it powers up, it goes to a boot location (boot address) to begin doing whatever it should do when it powers up.
If your MCU has a specific purpose (say controlling a flashlight), you can with an "ISP" (hardware called "In System Programmer") stuff a flashlight controlling program into that MCU. Of course that flashlight program will be loaded at the location that the MCU goes to when it powers up. The MCU can be programed by other means. ISP hardware and protocol allows it to be programmed AFTER it is installed in a system already - hence the name In-System-Programmer.
For your MCU driven flashlight (or your microwave oven, or your dishwasher...), chances are, you are always running that specific program, you wont be changing it. On the other hand, you may want to change your flashlight program or run something entirely different. In that case, you merely load the other program using an ISP. Well, of course assuming your hardware supports it - otherwise there is no point in ISP-ing your microwave oven program to your flashlight's MCU.
Now, to make it really easier to reassign to different purpose, you can make a power-up program that can load another program. So, instead of needing an ISP, your power-up program first detects if you want to load a new program, or to run the existing one you last loaded. That kinds of power-up program is called boot-loader.
The Arduino IDE is NOT on your MCU. It is on your PC. It allows you to edit and compiles your code, and if you choose to, it can tell the power up code (boot loader) to get ready to receive the code to to flash. The IDE sends the code down. The flashing is done within the MCU by the power up (boot loader) code.
Boot-loader is not a new concept. In the early days of computing, the early computers powers up and begin with talking to the punch-card-reader. The stack of key-punch cards contains your "power-up" code with each code punched as holes in different positions on a card.
When your Arduino MCU (in UNO/NANO/whatever) powers up, it goes to the power-up (boot) code and in the case of Arduino, it would contain the Arduino boot loader as the power up code. The boot loader would check for a specific condition. If that condition exist, it gets ready to download new program. If not, it would jump to your prior downloaded program. When you choose to flash using your Arduino IDE, the IDE reboots the MCU, sent it the signal to get ready to download. The bootloader sees the condition, it receives the downloaded program and flashes it. So the IDE doesn't do the flashing; it tells the boot loader "I want to flash", sends down the program, and waits for the MCU to send back the flash-status.
As exampled above, your hardware has to support it too... There is no point in downloading your dish-washer MCU program onto your Arduino MCU because your Arduino UNO doesn't have a water jet or dryer on the board. UNO, NANO, MEGA, all has different default hardware (and/or different MCU in the same AVR line of MCUs) so they can do different level of things. The ATTiny13 has so little memory it can't even run a boot loader. ATTiny85 has enough for a boot loader and then not much else. ATMEGA 318 or 328 are the MCU in NANO/UNO/Mini, they have enough to run the boot-loader as well as another program. None of them has water-valve or dish-dryer heater, but they have the IO-ports to control one if you hook up the Arduino board to one.
Each of these MCU's or boards has different hardware, so their boot-loader may do similar things but they are different. The ATMEGA 328's has more memory/features than the 318's. The 318's has more than ATTiny85. The ATTiny85 has more than the ATTiny13. The ATTiny85 doesn't even have I2C or RS232-Serial for example, it has a "universal serial" that can be used to support either I2C or RS232 but no TX/RX lines. The boot loader has to initialize different things and supports different feature/size in the "user program" so the differences in the boot loaders are significant while the type of functions they perform are similar. So, you will find the Tiny85's boot loader to be entirely different than the UNO's boot loader.
Typically, the NANO/UNO are ATMEGA 328's, but you can find super cheap ones on AliEpxress/eBay with ATMEGA 318's. I almost made a mistake once with some super cheap NANOs/UNOs but 318 instead of 328.
The Arduino IDE, the Arduino boot-loader, the standard Arduino board hardware, and the standard Arduino code libraries together is what can be consider as the Ardunio environment.
I have ATTiny13 on my simple flashlights. I have ATTiny85 on my flashlights with more option. While the 85 can, I don't use boot loader and I do not use any of the standard Arduino library. I use NANO/UNO for more complex tasks - well, "more complex" as in needing more than ATTiny85. While I may not download programs to those "mission-specific" NANO/UNO all the time, but I have the space and it does make my life easier to just keep the boot loader and use the Arduino-specific stuff in my case.
Hope this "layman's explanation" helps...
EDIT: replaced the phrase "wake up" with "power up" so as not to confuse with sleep mode type awaking.