Sort of.
IP addressing is at some level symbolic, usually relying on lower-level network protocols (with less hierarchic structure) to actually complete the transmission.
On the IP level, each machine has (at least) one IP, in (at least) one subnet. It may also (and usually does) have a "default gateway" (that is, an IP address through which it sends all packets going to somewhere other than a local subnet).
Abstractly, a packet destined for a web port looks something like:
[ethernet header][ip header][tcp header][payload]
The ethernet header contains various control information, including the source and destination MAC addresses on the LAN.
The IP header contains various control information, like source and destination IP and the encapsulated protocol (TCP, in this example).
The TCP header contains various control information, various flags (what part of the session is this, what's the sequence number, source and destination TCP ports, ...)
The payload is merely transmitted by TCP and "only the application cares".
ARP is used when someone on the local network wants to send an IP packet, to an IP it doesn't have a MAC address for and is basically an ethernet-level broadcast saying "who has IP address blah?".
Most machines won't have anything listening for pure-ethernet connections, but you may still be able to map that MAC to an IP address. In a non-switched LAN, you simply need to observe the packets, find something with a source or destination MAC that is the one you want to talk to and parse the IP out.
If the machine has an ethernet level listener of some sort, you could talk to that, but you won't be able to talk to that from outside the local LAN, as the ethernet frames destined for the machine won't be picked up on the other side of the local router.