Valgrind might report some memory still reachable.
This is known. See tensorflow/tensorflow#17739 for detail.
Resources like thread-pool and memory allocator are shared between sessions. Shutting down the session would not shut down shared resources because those resources may be reused for future sessions. I guess you want an API to shut down memory allocator/thread-pool, which doesn't exist AFAIK