Solved - looks like curly braces help interpret the entire variable, including properties that are accessed through dot notation.
The following code works:
println(s"user's full name is ${user.fullName}")
This outputs the following as expected:
>> user's full name is Firstname Lastname