Simplest answer for me was to declare the mutable borrows in the second function. If foo calls bar, do the mutable borrowing inside bar instead of passing bar a mutable reference, which doesn't work.
xxxxxxxxxx
pub fn foo(&mut self, thingid: u32) {
//stuff
self.bar(&thingid);
}
pub fn bar(&mut self, thingid: u32) {
self.things.get_mut(&thingid).unwrap();
//stuff
}