Say we have a LAN - 5 hosts connected to a switch. I have not configured any IP address to any of the hosts. Can I communicate with another host machine by sending L2 traffic - L2 header and data above it?
Yes. Most operating systems will provide APIs for that (though usually privileged), and there exist various programs which implement protocols directly on top of Ethernet. (And that's of course how IP itself is implemented by the OS.)
If you're looking for examples, "etherwake" and "open-plc-utils" are two projects that come to mind.
If yes, how any host will know the MAC address of destination host, for ARP we need an IP address anyway.
It won't magically know the destination. That's something your program/protocol needs to handle by itself. For example, you could simply ask the user to specify the correct destination MAC address by hand.
You could also implement some kind of a discovery protocol that makes use of L2 broadcasts (i.e. make an equivalent of ARP for your own protocol). For example, in Mikrotik RouterOS, the "RoMON" L2-based management protocol will broadcast discovery packets and collect responses from nearby nodes.
(Meanwhile, the "MAC-Telnet" protocol simply broadcasts all data and doesn't care about the next hop MAC address at all. This is of course a security problem, and only acceptable because MAC-Telnet is a last-resort recovery tool.)
Or you could use multicast and make all nodes listen for packets on a fixed address. For example, the Homeplug management protocol (open-plc-utils) will by default send all frames to 00:b0:52:00:00:01 and will get a response from any Homeplug device.