What would be the best way to archive items from one list to another. Is there OOB functionality for that or do I have do code this by myself? If I had to code it, what would be the best approach?
As long as the source and target lists are in the same site collection, you can move them with Manage Content and Structure (_layouts/sitemanager.aspx.
Some other options would be using a workflow to move data around, assuming it's within the same site collection. You can also use Content and structure to move items from list to list, depending on your SKU.
Another option is to use Information Rights Management (IRM). IRM allows you to specify retention times based on dates. When a specific time range is met, the IRM can trigger a workflow, in this case move it somewhere else.
To do bulk workflow operations after the fact, you can create another workflow that fires on edit that meets a certain condition. For instances like that, I typically create a simple column, like a number column, and specify in the workflow if number column = 1, then do something. Then in datasheet view, i set the desired items to 1 to initiate the workflow.
Other workflow tools like Nintex and K2 allow for looping.
You can use granular backup to achieve this either through the UI or PowerShell. The corresponding restore will require PowerShell. The finest level of granularity is the list - you can't work with individual list items (except through code or third party tools).
You can also create a list template from list settings in the UI (remember to check the "include content" option. This creates a ".stp" file, and also works with the 2007 version of SharePoint. The file can then be used to create a new list.
Create a custom timerjob to transfer the items to an archive list.