There were custom tags since 1997 (v3) and functions since 2001 (v5).
https://cfdocs.org/coldfusion-versions
CF is interesting because it started as basically server side includes with some extra features to connect to a database. It was meant to be very approachable and not general purpose. Like a distant ancestor to Jupyter and Observable.
That approachability made for some big messes, but it also spawned a huge community of software developers who might not have gotten into it otherwise.