How can I cycle through items in a DynamoDB table?
The efficient way to return items that haven't been seen would be to have an attribute of seen=no included when inserted.  Then you could have a global secondary index over that attribute which you could then Query().
There isn't an efficient way to reset all the seen=yes attributes back to no.  Scan() and Query() would both end up returning the entire table and you'd end up updating records one by one.  That will not be fast nor cheap with a large table. 
EDIT
Once all the records have seen="yes" and you want to reset them back to seen="no"  A query on the GSI suggested above will work exactly like a scan...every record will have to be read and then updated.  
If you have 1M records, each about 1K, and you want to reset them...you're going to need
250K reads (since you can read 4 records with a single 4KB RCU)
1M writes
How can I cycle through items in a DynamoDB table?
That is, if I have a table containing [A,B,C], how can I efficiently get item A with my first call, item B with my second call, item C with my third call and item A again with my fourth call, repeat?
This table could in the future expand to include D, E, F etc and I would like to incorporate the new elements into the cycle. 
The current way I am doing it is giving each item an attribute "seen". We scan the whole table, find an element that's not "seen" and put it back as "seen". When everything has been "seen", make all elements not "seen" again. This is very expensive.