NavMesh.CreateSettings() not allowing changes

You’re correct in your assumption - you aren’t getting a reference to the settings, but a copy of them. What you would need would be a byref option, like:

NavMeshBuildSettings buildSet = ref NavMesh.GetSettingsByID(i);

However, that’s only available in C# 7, which Mono hasn’t rolled in yet. There’s even a Unity forum post about it (very roughly) in the 2017 beta forum where this specific thing was discussed:

So, if you build the NavMesh programmatically, your settings should take (I modify buildsettings after grabbing from an agent and it works fine), but it won’t reflect in the inspector. Even with byref declarations, it’s possible that a private or protected value in Unity’s editor code would prevent this from being set anyhow, though you’d see an exception to that effect and know that was happening.