If you look at Vlax-get obj 'area it will return an area so you can compare that answer is it within tolerance for the new object just added. yes you must use a iterative approach, either using a small offset repeatedly till you get to the desired result may use a seed starting value. Then just keep adding to offset value, it can be slow. An alternative method is to jump to halves, you purposely oversize the offset 1st guess, check is equal then jump to a 1/2 way of 1/2 way value if smaller jump to new 1/2 way + 1/2 way of old outside value, hopefully this makes sense see diagram. You are resetting offset step value each time by 1/2.
When used as a search a sorted values say 10,000 it takes 13 goes to find the item your looking for, that is fast.
How much do you know about lisp ?
Something to have a play with. I have set a limit so stops endless loop.
(defun c:wow ( / area% oldsnap obj area1 area2 x)
(setq oldsnap (getvar 'osmode))
(setvar 'osmode 0)
(setvar 'cmdecho 0)
(setq plent (car (entsel "\nPick object ")))
(setq obj (vlax-ename->vla-object plent ))
(setq area1 (vlax-get obj 'area))
(setq area% (* area1 (+ 1.0 (/ (getreal "\nEnter % ") 100.))))
(setq off 0.0 step 0.0001 x 1)
(repeat 3000
(vla-offset obj (setq off (+ off step)))
(setq area2 (vlax-get (vlax-ename->vla-object (entlast)) 'area))
(princ (setq x (1+ x)))
(if (equal area2 area% 0.01)
(progn (alert (strcat "\nArea found " (rtos area% 2 3) " " (rtos area2 2 3) ))(exit))
)
(vla-delete (vlax-ename->vla-object (entlast)))
)
(setvar 'osmode oldsnap)
(if (> x 3000) (alert "solution not found "))
(princ)
)
(c:wow)