let found = x.find(el => el.a === 1)
returns the element of the array that matches the condition and declare that found is a reference to that object.
In the next assignment :
if(found) found = {...found, a: found.a++};
you are first manipulating (a: found.a++) the found variable by adding 1 to the found.a property (note that in this moment found points to the element returned by x.find())
After you did that, you declare that found now points to an object built with the {...found, a: found.a++} expression.
Note that, as you called a: found.a++, the found.a++ returns the value incremented where you place it, but only apply the changes to the original variable (found.a) in the next statement. That is why it doesn't propagate the change to the x value.