Its not possible to requery a single record in a block without requerying the entire record set.
Is there a reason why you dont want to use execute_query, such as performance?
The way I have set up auto-refreshes is to use DBMS_ALERT and a timer. If a record is refreshed the form performs the following steps:
1) Make a note of the number of record that the cursor is currently on

SYSTEM.CURSOR_RECORD).
2) If its a multi-row block, make a note of the lowest visible record in the block (TOP_RECORD and RECORDS_DISPLAYED block properties).
3) Re-query using the same WHERE clause as the last query

SYSTEM.LAST_QUERY).
4) Move the cursor to the lowest displayed record from step 2.
5) Move the cursor to the current record from step 1.
Steps 4 and 5 will ensure the visible display of the records does not appear to move, and any changed records will be automatically displayed as if they were refreshed.