Why does Home Assistant use data template directives?

For example, if you want to hardcore values you use the data: directive, and if you want to use an attribute value, you use the data_template: directive.

This seems unnecessary as you could just use data: and use the pre-processor syntax {% state.foo %} instead. This is how many HTML pages are built to include dynamic content. It just seems like a lot of redundant syntax needs to be created.