If you wanted to only ever have one plot the two ways come to mind. One is similar to @bbgodfrey's method but incorporating some front end code to delete the previous plot. The other is to make the plot dynamic:

    a = Table[n, {n, -20, 20}];
    Dynamic[ListPlot[a, DataRange -> {-1, 1}], TrackedSymbols :> {a}]


Now every time you change `a` the plot will change. The example below is quick and dirty. I've used `Flatten` to modify `a` but there are many other ways: `Join`, `Append`, `Prepend` and so on.

[![enter image description here][1]][1]

[![enter image description here][2]][2]

**Edit**

there are a few ways to do it without using dynamic. Here is a [reference][3] so something @Kuba posted:

    SetOptions[EvaluationCell[], CellTags -> "target"]

then

    NotebookWrite[Cells[CellTags -> "target"][[1]], 
     Cell[BoxData[ToBoxes@ListPlot[a, DataRange -> {-1, 1}]], "Input", 
      CellTags -> "target"]]

[![enter image description here][4]][4]


  [1]: https://i.sstatic.net/E2r63.gif
  [2]: https://i.sstatic.net/ELf81.gif
  [3]: http://mathematica.stackexchange.com/questions/51891/overwrite-contents-of-a-cell
  [4]: https://i.sstatic.net/Ul45C.gif