I am not sure it is useful to expose arrow::MutableBuffer as the out argument in functions like arrow::AllocateBuffer. See e.g. http://arrow.apache.org/docs/cpp/namespacearrow.html#a4e4daf985e41d6879c9dbb0131157c51
In my experience this is more of a nuisance than anything, as mutability is a dynamic property of buffers (we have buffer->is_mutable() on base instances). If we were doing a lot of compile time reasoning about buffers, that would be a different story, but we are not.
I don't think we should nix the MutableBuffer class, just return pointers to base from functions. We can still get it back with std::dynamic_pointer_cast.