Recursively coping directories has the potential to overwrite a large number of files. If you were to do this unintentionally you could do a lot of harm with one command. The default being non-recursive makes sure that every time you copy one directory into another you are doing so explicitly and thus have theoretically thought about what you typed before you executed it.
This is not the best example, but imagine what would happen if you accidentally typed the following command without realizing both targets were directories:
cp /bin /usr # /usr/bin already exists and has important stuff in it
EDIT1: One solution could be to interactively prompt the user and ask "Are you sure?" instead of adding an explicit flag. This, however, does not quite fit into the UNIX philosopy that well: "Don't insist on interactive input" [McIlroy78].
cp is an ancient UNIX program that has obviously changed some over time, but this lineage can still be seen in many aspects of its design.
EDIT2: I found several other good reasons for this (there are probably more too). One can be found on StackExchange.
Command line options and the fundamental behaviour of programs as old and as common as
cp can be hard to change because of their use in shell scripts. Some scripts could depend on this behaviour (refusing to copy directories). An interactive prompt is not something you want in many shell scripts either.
Coping files and coping directories are two fundamentally different actions that necessitate conceptually separate commands or options to handle them: Why unix mv program doesn't need -R (recursive) option for directories but cp does need it?
[McIlroy78] The Bell System Technical Journal. Bell Laboratories. M. D. McIlroy, E. N. Pinson, and B. A. Tague. “Unix Time-Sharing System Forward”. 1978. 57 (6, part 2). p. 1902.