I did a lot of programming on the Apple (not professionally, but it's what I learned on) and Applesoft BASIC and assembler where about where it was at for hobbyists. Other languages were available -- Logo was common, Pascal was written about everywhere but I know no one who used it, I wasn't really aware of C being used on any Apple platform until Orca C for the Apple IIGS, there was a Forth interpreter with turtle-style (or call it Logo-style) graphics floating around too.
I'll address some of your questions, and then basic ideas:
Can you think of popular games written in BASIC? How about C?
A lot of shareware was written in BASIC, not only Applesoft BASIC but also Integer BASIC (which as the name implies, did not have floating point numbers). The Eamon series comes to mind, but I can't really think of many others. Also, a lot of the software written by the Beagle Bros. was done in BASIC (mostly utilities, not games).
I believe most commercial software was written in assembler, though.
But I cannot imagine that games were written like that, were there editors/IDEs? How were programs stored on disks/tapes?
I used Merlin Assembler, to call it an IDE might be stretching it, but it worked just fine. As you said you could drop to the system monitor and enter opcodes and run from there. Merlin had a way you could return to it from the system monitor (which I don't remember how now).
But was there no visual editor?
There was a third-party tool that made the Applesoft environment a bit better, and would allow you to use your arrows to scroll about the screen and make edits like a visual editor (you still had to hit return at the end of a line or the changes wouldn't stick). I can't remember what that was, I used it quite a bit.
Or was it necessary to talk directly to the hardware all the time if you wanted to draw something or play a sound? Were there any libraries at all?
On the Apple II+/IIe/IIc you pretty much were just talking to the hardware. There were a couple of programs in ROM you could use but they were very limited and usually you would PEEK and POKE various memory locations to change registers to do what you wanted, for example to change graphics modes, poke 49152 to trigger the speaker, etc.
On the Apple IIGS, the ROM came with a suite of libraries similar to what the Macintosh came with, for doing fancy GUIs and what-not. The ROMs were updated over time, and if you loaded a system disk that used newer libraries, they would read from disk rather than ROM, causing boot time to go REALLY SLOW. There was ROM 01, 02, and 03, and 02 -> 03 was a free upgrade, and there was a release before 01 which they would do a free upgrade to 01 as well.
I'd be happy to hear any other differences, like what image/audio formats were used. Given that there wasn't really a concept of files if I understand it correctly, I'm wondering how that worked. Did you have to type your graphics and sounds in assembler? How did that work in BASIC?
There were files, I am not sure what you mean by that, and ProDOS supported directories no less (the earlier DOS did not but still had a concept of a file you would recognize). I used bitmaps and .pcx's. I don't remember any audio files on the II+/IIe/IIc series, but that was because it was hard to make any noises fancier than video game blips and bloops. There were some hacks out there that did make fancy sounds (in particular, I had a disk that played Gun N' Roses), but it almost always was done grammatically.
Compared to modern environments, it was downright primitive. But remember, there was no support to run multiple programs at the same time, so your compiler effectively had to be your editor as well -- you couldn't really argue the benefits of vi vs. emacs, so whatever your compiler gave you, you learned to use. I do think it was a lot easier than using libraries piled upon libraries, and there are a lot of tricks if you are working for the hardware and know what it is. For example, a common implementation of "pause for a moment" was "for (int i=0; i<1000; i++)" (it's different in BASIC), which is never used now, because hardware is so fast that you'd need a huge number, and even if it wasn't, it would be run on different kinds of machines so it would be a different pause for different people (the II+, IIe, and IIc ran at 1MHz, and the IIGS had a setting to slow down to that from its native 2.7MHz for better running of older software).
This is all from memory, I did not look at any references while writing this, so I apologize if my memory is faulty and I told you wrong stuff. But I hope this gives you a bit of a taste and answers a few of your questions.