So, some background it in order. hObject not a property you set. It's actually the handle to the object that called the function in which it in being used. So, when you use it inpushbutton1_Callback, you're actually setting the KeyPressFunction for pushbutton1! That's why it works exactly once. Instead, try this:
set(handles.figure1, 'KeyPressFcn', {@figure1_KeyPressFcn, handles})