The difference between holidays and special days depends on your use case.
From the tech side for Holidays are more information generated like is today a day between a holiday and weekend and if on the same day a holiday and a special day, the holiday has a higher priority. From all other they are similar.
By my self I using the holidays for days where I don't have to go to work and special days are days which are important, but normal working days (e.g. birthdays, religion days, time shifting days, ...). So the holidays are used for control something (e.g. open blinds on weekend and holidays to other times as on normal working days) and special days for information purpose (show on a display if the day is a special day).
For the calculation normally the local time is used. But its the time settings of the server, where your node-red installation is running, not the side of the client (Browser). On some systems the local time is not the same as the time on the client side.
The msg.payload.today.isHoliday is a boolean. If you comare this to "true"with the three === (type and value must match), it will not work. You has to compare this with only two ==(do a typecasting) or to a boolean === true.
last but not least:
I have created and already implemented a feature request to the node. It add an additional input for a holiday or a special day. If the holiday or special day is reached it sends the additional data as msg.payload.data to the output. This make it more easy to send additional data by different days.
I have released a new Beta Version, but only as beta Version, because additional tests needed if there are some side effects.
It changes from internal UTC to local time. I think it works wrong if the time-zone has a negative offset, which not occurs for timezone with positive offset.
To thus it can currently only installed from command line.
If anyone is interested into testing, try from the Node-Red installation directory: npm install node-red-contrib-german-holidays@beta