All of the answers so far pretty much have it.
As recently as C++, languages didn't even have a "boolean" type. If such a type was needed, either an enum or a typedef int was used to make bool LOOK like a type. It was only when the next generation of web and Windows-oriented languages came around, such as VB, Java and C#, that "bool" was deemed important enough to include as a "built-in" type.
What a "trilean" value's third value might be is very context-dependent. "True" and "False" are very general, and can be easily translated in the mind of the programmer to "yes" and "no" or simply "on" and "off". Programmers think this way; they have to, because that's the way the computer thinks. Under all the layers of abstraction are billions and billions of binary digits, which are represented by the continuity of microscopic circuits in the CPU and other hardware; on or off, no in-between.
Adding this third wheel confuses things. What's the third value? Null? Not Specified? Unknown? Other (and what else could there be in an answer space with "on" and "off")? This third value becomes VERY context-dependent, and for this reason "trileans" are not built-in.
Just like simple booleans before they were built-in, you can always create the types you need in virtually any strongly-typed language. A "trilean" would be created using an Enum with "true", "false" and whatever your third value needs to be. In .NET, you could either use a nullable bool, where null would be your third "value". Or, there are several enumerated "tri-state" types in the Framework libraries; DataGridViewTriState is a big one, and its values are simply True, False and NotSet which would work in a large number of cases.