Change the polygons inside your NavigationPolygon resource with a script. You can either add vertices and matching polygons arrays or you can define outlines arrays and use makepolygonsfrom_outlines() to create a procedual navigation polygon. It is important to note that you polygon edges can not intersect and if you use outlines the outlines can not overlap and intersect.
When you finished changing the NavigationPolygon you need to first set the current NavigationPolygonInstance navpoly = null before you apply the changed polygon, else the update will be blocked cause it is still the same resource.
TileMap baked navigation is highly inefficient for this, don't use it.