1. Конфигурационные слова (в atmega они называются fuses) являются программно доступными (отдельно по записи и чтению) или нет?
Надо уточнять по конкретному кристаллу. У поддерживающих Self programming - есть подраздел с название типа "Reading the Fuse and Lock Bits from Software" (или как-то похоже), там описано как их прочитать. Насчёт записи не нашёл.
2. Есть ли у них адреса в общем адресном пространстве? Какие это адреса?
Нет.
3. Как они прошиваются? Стандартным образом (программатором, естественно, не через резидентный загрузчик) только указать их адрес (если он есть) или каким-то специальным образом? Только без всяких там "возьмите программатор и такую-то программу". Как это происходит на уровне сигналов на ногах процессора? Даже на уровне hex-файла достаточно. Вот, например, хочу я все писать в шестнацатеричном виде, без всяких там трансляторов и т.п. (я иногда так развлекаюсь). Что я должен (руками, явно, просто текстовым редактором!) написать в hex-фйл чтобы прошить конфигурацию?
Из отдельного hex, хотя это зависит от программатора и его оболочки/интерфейса, бывает по разному (и из hex, и просто значение байтов, и перечисление по именам). Распределение битов по байтам есть в доке в разделе "Memory programming", как именно их прошивать - далее в разделах про параллельную ищи ISP прошивку, там отдельными командами. Если прошиваете сами, то можно положить их и вместе с основным кодом, где-нибудь под 2^32 (2^24), столько памяти в мегах пока не бывает.
А область загрузчика (если она указана в фьюзах) тоже недоступна и по записи и по чтению? Опасения на счет того, как бы не потереть загрузчик при ошибках программы.
Это регулируется fuses BLBxx, смотрите доку на конкретный кристалл, раздел "Boot Loader Support".