Parsing a text file of nested structures using a state machine
The obvious answer is to make currentstate an explicit return value from your functions, for example:

def do_out():
    print "doing OUT - transitioning to DNARRAY"
    return state.DNARRAY


Then handle it appropriately in the final loop:

def decisions():
    currentstate = state.OUT
    while(currentstate != state.END_OF_FILE):
        currentstate = statemap[currentstate]()
    print "done!"