Your suspicion is correct. Use of any of the Get ( ) functions in a stored calculation will result in the returned value as of the time the calculation was stored, or when any value on which it depends changes. So yes, you'd have to run a script to update the values (or do it manually).
As to your second question, storing data rather than using unstored calcs is generally a better approach. It will perform much better. All calculations force a performance penalty when they evaluate. The question is, when do I pay the penalty? Stored calculations impose the penalty whenever they are updated, but just sit there otherwise. Unstored calcs, on the other hand, impose the penalty every time they evaluate, for every client. Ouch. (The only benefit of using unstored calc fields is that they aren't downloaded from the server, so they don't consume network traffic. But it's usually a poor trade.)
My suggestion would be to use a fixed date value, rather than Get ( CurrentDate ), for something like this. (I often use a creation date.) You can set up a relationship (or a pair of them) from the layout / TO on which the chart is based using global fields and just set them to the current and previous year values. That will give you your two sets of data against which you can chart, without the need to update the calculations. The relationships will evaluate quite quickly because the calculations are indexable, and that will vastly improve the performance over using unstored values.
Thanks. I suspect the solution was going to be something like that. Even more important now, as it appears some of the calculations and summaries on other layouts will have to be updated monthly.