I see two separate issues: (1) what a construct is intended to mean,
and (2) whether that construct can be implemented portably. I would
say that if (2) is not satisfied then typically we give up on (1).

thanks for that example.
so within the lexical scope, % already had had a meaning, and now % should have a different meaning but not really.
This is considered good style by users of the paradigm ?

It seems to me that if one is to pick a symbol that has this magic power, we must be aware of how the #` readmacro works anyway.

;; a function to return a string of either 'x flat' or 'x %'
(funcall #`(format nil "tax=~F ~A" % (if (eq %% :percent) '% '|flat|)) 5 :percent)
"tax=5.0 X759"

;; a function to compute 5% of its argument relying on a lexically available helper
(flet ((% (x base-amt) (* .01 x base-amt))) (funcall #`(% 5 %) 100))
debugger invoked on a UNDEFINED-FUNCTION in thread
#<THREAD "main thread" RUNNING {1002AFBA03}>:
  The function #:X763 is undefined.

My point being: it strikes me as specious to say that a "poor-man's source transform" allows this to be referentially transparent.
I would say: advertise that it binds "%" and "%%", and just do that. No 'subst' of variables.
The transform can only have been done correctly by a code walker in the first place.
That it works right in most cases that some author contrived but not in other cases that some other author contrived is just random.