Buenas:
Cuando se llama a repaint(), el componente borra todo lo que tiene y vuelve a dibujarlo todo. Para que no se siga dibujando el círculo
Código:
public void actionPerfored (ActionEvent e) {
lienzo.setCirculo (null);
lienzo.repaint();
}
y así el repaint() borraría todo y pain() no volvería a dibujar el círculo puesto que es null.
Circulo sería una clase, como dices, con x,y para el centro y radio. Igualmente harías clases para cada uno de los elementos que quieras dibujar, Linea(x1,y1,x2,y2), Cuadrado (x1,y2,lado), etc.
Se bueno.