Q:

Colon in a lambda function? 

I don't understand the role of the colon in the following lambda expression:
myFunction :: [Int] -> [Int]
myFunction li = foldr (\x acc -> if x < 10 then x : acc else acc) [last li] li

I'm used to seeing the colon for recursive actions, however it looks like this colon is effectively saying prepend to current accumulator list, is that right?  

A:

: is a data constructor.  It prepends a value of type a to an existing (possibly empty) list of type [a]. 
let x = 1 : [2,3,4]  -- x == [1,2,3,4]

You can picture the list type constructor as being defined like this:
data [] a = [] | a : [] a     -- : as an infix operator
data [] a = [] | (:) a ([] a) -- : in prefix positino

which might read more easily as
-- [] == List
-- (:) == Cons
data List a = EmptyList | Cons a (List a)

By "recursive action", I assume you mean you see it being used in a pattern matching situation like
head (a:as) = a

This is not unique to (:); pattern matching can be done with any data constructor.