In lazy languages, it's very obscured, because you're not sure whether the integer you're pointing at is a four-byte number or whether it's a big unevaluated expression.
In strict functional languages, and also in Lisp-like languages, it's not obscured. You might, say, not know exactly how many bytes a certain datastructure takes, unless you do some thinking but the same goes for C and C++. (For example, tell me how many extra bytes the std::string datatype takes in the nearest implementation of the STL.) Garbage collection adds the danger of leaving around dangling references, but that doesn't really have anything to do with the functional aspect of the language.