One of the approach, bind variable with controller:
<apex:page controller="dataTableCon" id="thePage">
<apex:dataTable value="{!accounts}" var="account" id="theTable" first="{!offset}" styleClass="tableClass">
<apex:facet name="caption">table caption</apex:facet>
<apex:facet name="header">table header</apex:facet>
<apex:facet name="footer">table footer</apex:facet>
<apex:column>
<apex:facet name="header">Name</apex:facet>
<apex:facet name="footer">column footer</apex:facet>
<apex:outputText value="{!account.name}"/>
</apex:column>
<apex:column>
<apex:facet name="header">Owner</apex:facet>
<apex:facet name="footer">column footer</apex:facet>
<apex:outputText value="{!account.owner.name}"/>
</apex:column>
</apex:dataTable>
<apex:commndbutton rerender="TheTable" value="Rerender Table" action="{!setOffset}"/>
</apex:page>
Controller:
class dataTableCon {
public offset {get; set;}
public void setOffset()
{
// doSomething
offset = "5" // whatever
}
}