Remap ls to honor .hidden files
Some suggestions:


Upper case names are by convention reserved for exported variables.
Use More Quotes™, especially around $@
Use arrays for constructing commands
Variables are by default declared in the global scope. It would be better to declare the variables in the function local.
Use getopt to parse options - the default pattern is a bit wonky but it's easier to deal with for complex cases.
You can use readarray to read .hidden into an array in a single command.
The returns are redundant.
in $@, or more correctly in "$@", is redundant. for argument does the same thing.
You don't need semicolons if you put then on the next line like you already do with do.
You shouldn't have to use index variables. For example, both times $F is used you can instead use FILES[${#FILES[@]}]=…
$* and its accomplice ${name[*]} split every argument on $IFS, and is therefore extremely rarely useful. Use $@ and ${name[@]} instead.