llSetStatus modifies properties of the object. This means the new status will persist until it is explicitly changed back. For example, if axis rotation is disabled for a specific object, it won't be rotateable with a function like llRotLookAt until axis rotation is re-enabled. Even if the script is reset, deleted and replaced with a new one, the object is put into inventory and moved to a different sim, copies of the object are rezzed back out of inventory, or anything else.

STATUS_PHANTOM can't be set on a specific prim in a larger linked object--that is, setting STATUS_PHANTOM to either TRUE or FALSE on a prim contained within a linked set of prim sets STATUS_PHANTOM for the object as a whole. There may be ways to script around this, perhaps by unlinking, setting phantom status, and relinking (according to this forum post). However, many of these methods may be considered bugs and can be quickly patched by the Lindens when they are discovered.

STATUS_BLOCK_GRAB only affects the prim the llSetStatus function is in; child prims in linked objects won't be affected.

Only the status flags in use by LL may be set, attempting to set/get any other flag will always return FALSE.

Many of the status flags set by llSetStatus can also be set by llSetPrimitiveParams and retrieved with llGetPrimitiveParams. However, be aware llSetPrimitiveParams and llGetPrimitiveParams use different constants than llSetStatus. You can't substitute a constant from llSetStatus for one from llGetPrimitiveParams or vice-versa.