If you know that [...] is there, you can
CONCAT(SUBSTRING_INDEX(col, '[', 1), 'replacement text', SUBSTRING_INDEX(col, ']', -1))
But since everything is returned by SUBSTRING_INDEX when the delimiter is missing, you will most likely not get the desired results otherwise.
Also, the above will deal with just the first occurence of [ and ]. Thus, if you have several such pairs, you'd need to run the query multiple times.
The above code doens't care about unbalanced pairs either. It just takes everything up to the first [, adds the replacement text and then adds everything after the first ].
If you need more advanced string handling, it's easier to do it using PHP, such as with [man]preg_replace[/man]