I read in the manual that a "#" symbol is not recommended as a token.
So can "#" be treated as string in between "[]"s??
"#" it's a symbol by default, but you can define it as string, number, keyword, or a any new custom token type you want.
I am trying your suggestion... get two errors
THL = class(TSynFacilSyn);
Error: Identifier not found "TSynFacilSyn"
That's because you're not using SynFacilSyn

When using SynFacilSyn, you have to include the units: SynFacilHighlighter.pas and probably SynFacilBasic.pas.
procedure Next: override;
Error: Fields cannot appear after a method or property definition, start a new visibility section first
My code...
I think you need to declare the class THL in a type section, not inside the class TForm1.

Check the attached project.
If you want to change the colors, change the attributes programatically like indciated in Technical Documentation, Section 5.4.
If you want to read the token inside brackets, you can get the token in the method THL.Next:
procedure THL.Next;
begin
posIni := posFin;
if inBrackets then begin
posFin := posEx(']', fLine, posIni)-1;
if posFin = -1 then posFin := tamLin;
fTokenID:=tnKeyword;
inBrackets := false;
// -----> Here the text inside the brackets can be obtained with GetToken() <-----
end else begin
charIni:=fLine[posFin];
fProcTable[charIni];
if GetToken = '[' then inBrackets := true;
end;
end;