Reader macros allow you to write parser functions for characters. So you could write a reader macro for { such that it collects all enclosed content until a } character. The it could transform that content and return the transformed result. The result is always Lisp data, not a string. How you transform the enclosed text is up to you.
Common Lisp itself tries to minimize its usage of characters. It is expected that users or libraries want to make use of characters like {, }, [, ], and many others.
I would not write `slice` as a `macro` or special syntax. I would use the `SUBSEQ` function, which already exists.
The simplest way to introduce a special syntax for it is to use different parentheses: But the default Lisp style is this where `functionname` is a real symbol. It may be longer on the character level, which may be a problem for some users - not for me.