In a project like this, it seems it would be possible to combat fragmentation by simply moving data to be contiguous. The engine should be able to find all necessary pointers and update them. Yes, that's a slow operation, but for many usecases speed doesn't matter much.