If you’re using GTK3, you can conceivably use
gtk_widget_queue_draw_area() to indicate that you only want to redraw a specific region of the widget.
With GTK4 this is not possible: drawing is based on operations with an intrinsic bounding area, and the rendering pipeline in GTK identifies the region of each rendering command (and diffs the previous rendering operation tree with the new one); for all intents and purposes, though, GtkDrawingArea is a single drawing operation, as it uses a single Cairo surface. If you want to have sub-regions, you will need a custom widget with custom render nodes; or you will need a custom widget with separate child widgets for each part of the UI you’re rendering.
In general, the intent behind GtkDrawingArea, in both GTK3 and GTK4, is to provide an easy way to draw simple content with Cairo without subclassing GtkWidget directly; if you start adding complexity, you should always switch to a custom widget instead.