Just a thought, and this is untested, but you could use the GetPaged method on your TypedDataSource, as I am doing, but instead of binding to a GridView which returns the PageSize, PageNumber automatically, specify a paramater such as:
<!-- The basic DataSource for Articles to be displayed on a Page -->
<data:ArticleDataSource id = "ArticleDS" runat= "server" selectmethod="GetPaged" EnableDeepLoad="true" EnableViewState="false">
<Parameters>
<asp:ControlParameter Name="PageNumber" ControlID="__Page" PropertyName="PageNumber" />
</Parameters>
</data:ArticleDataSource>
And in your Code behind, expose a property named PageNumber that tracks which 'virtual page' of data you are on in ViewState. The <asp:ControlParamater does work, however it is not displayed in intellisense.
Then perhaps wrap the Repeater in an Atlas UpdatePanel for partial page rendering, using forward and back buttons as triggers, with event handlers that increment or decrement the PageNumber. That way you take adavantage of the GetPaged method which is far more efficient. Im a bit busy at the moment but try this out and if there are problems, ill get back to you...