Axis wraps Scene so the way to access plots is ax.scene.plots as you said, I didn’t mirror that vector over to Axis just for convenience. Figure has .content because there’s no other place the Block objects would be stored, Scenes don’t hold Blocks, but their child scenes and plot objects.
You shouldn’t do ax.xtickformat = x->["0", "π", "2π", "3π"], this means “replace the labels of whatever tick values are currently shown with those four strings” and it will not work if the number of auto-ticks changes to something other than four, or the values change and then you’ll have incorrect ticks.
To specify tick values and tick labels at the same time do ax.ticks = (values, labels). There is no convenience function to specify only new labels for the current ticks and hardcode those tick values at the same time. You could write one if you want?
Question 5 looks like a bug to me, deleting objects has been neglected functionality so far (understandably so because people care more about creating stuff at first). Maybe open an issue on github?