Daemon threads exist only to serve User threads. Typically they will provide services to the User Threads and User Threads will do the real "work" in the program.
So if there doesn't exist any live User Thread, the JVM may choose to terminate the program even if there are daemon threads running.