Потому что логично unsafe нужно использовать, когда мы лезем куда-то в железо или извращаемся, но тут мы вынуждены обманывать borrow checker, который обожает борровить всю структуру в геттерах вида fn get_a_mut(&mut self) -> &mut A и, видимо, еще и closure так себя ведет тоже.
может кто-то знает, как сделать такие геттеры более нормальными? copy, clone, assign не предлагать, нужно именно вырывать поле из из структуры. Зачем эти геттеры? А как ты сделаешь в расте что-то вида наследования? заюзаешь определенный трейт для схожих объектов.