Yes, XSLT has more of a functional programming language. For XSLT that has quite drastic consequences. For example variables are immutable.
In my experience, that makes it extremely hard to learn XSLT like a programming language. If you have no experience with functional programming you will not understand why XSLT is so. You must be very motivated or your boss must motivate you. Otherwise you will endlessly shake your head and start hating that language. For example it is impossible to work with XSLT without using recursion. If you are not familiar with recursion enough, you are unable to imagine how anybody could work like this. In Internet you can read phrases like when you learn Functional Programming you must "re-wire" your brain.
XSLT is no good language to "re-wire" your brain, because in XSLT there are too many things that distract you from this goal. There are many textbook that start to tell you the whole story of XML, for example XML namespaces, schemas, the XML syntax rules, XPath. This is already complicated. Most people learn these things automatically when they need them. If you just want to learn XSLT you don't need all this and you don't want all this. You just want to start with simple examples. But if you find simple examples these are then already complicated to understand, because as already said, without recursion, you cannot work with XSLT.
I can tell you from my personal experince, that when I came from programming languages like Python or Java I was completely shocked about XSLT. It is nothing what you expect or know.
If you are really ambitious to learn functional programming (which personally I would strongly recommend you), you should definitively not start with XSLT. The concepts of functional programming are not complicated. But you need more practice to really do practical things with functional programming. And therefore XLST does not work, because you have the whole XML eco system and the impracticable XML syntax always around you. That makes the learning experience bulky even if you manage to familiarise with all this.
XSLT is also not really appropriate as a first programming language. All you typically do with XSLT is transforming XML files. You cannot simply start with a Hello Wold example. In order to demonstrate you, what I mean, you can have a look at this example. It computes the average. In a programming language like Lisp or Haskell that is a simple exercise. But see how much stuff you need in order to have a good example with XSLT. And that example is not even complicated. It does not use recursion.
If you are not so much interested in functional programming, you can still learn and use XSLT for simple things. Indeed the very very most use cases for XSLT are simple. For example you only want to move a node from one location to another location or rename a node. You can use XSLT effectively for such things. For example if you have a tool update in your project and you want to automatically convert the file format from one tool version to a file format of a newer tool version. Such things work perfectly in XSLT. But this is just an XML tranformation. XSLT can do much more than XML transformations. If you want to use it like a real programming language, you also need to learn more than what you need for these simple XML transformations.
Since XSLT version 2.0 the languages provides a few features that in many situations help you to avoid complicated language features. You will quite often on Stack Overflow for a problem find different solutions for XSLT 1.0 and XSLT 2.0. Knowing this is also part of the challenge. XSLT 1.0 always works. But the XSLT 2.0 is often much easier (see a typical example for this). As a beginner you don't know if the one solution for a problem you find on Stack Overflow is a good solution or not.
In order to make clear, what I mean with "complicated" things, I have an example. There is a XSLT based tool that converts data from Open Street Map into SVG. It can be found here. That is definitively not a simple transformation. If you want to develop such things in XSLT, you need a good understanding of functional programming. It is no surprise that this project is not maintained since 2012. But I can confirm that this tool indeed worked well at that time.
Another point is that for debugging XSLT you need quite specific tools. That also complicates daily work.
As a final word, I would like to clarify why XSLT is this way. XML is two things. It is a data structure. And it is formatted text (e.g. (X)HTML). That has complicated implications. For example in XML there are rules that specify when line breaks are automatically removed (the normalization process). If you want to format something on your own way, this makes XML a complicated file format.
XSLT is also two things. It is XML (which again is a data structure and formatted text) and a programming language. That means, you can freely mix programming constructs and elements of your target language. That is very nice and comfortable. But for learning a programming language this is probably not what you want. You should pay the price of this clumsy XML syntax only if your application really is about XML data processing.
If you like the idea that your programming language itself is a data structure, you should consider Lisp. What for XSLT is XML is for Lisp S-Expressions. Lisp is Data Structure and programming language. XML/XSLT and Lisp are nearly the only programming languages with this duality (Homoiconicity). That is enabler for many dynamic programming solutions. But Lisp is a general purpose language that goes much beyond XML/XSLT while for XML processing XSLT is the answer.