My ip address is specified in the ip packet sent to the next node. I
wonder if a device that handles this packet can modify the ip address
before forwarding it to the final destination?
That is called NAT (Network Address Translation), and it is very common. For example, nearly all home networks use Private IPv4 addressing that cannot be seen on the public Internet, so the source addresses use NAT to get a public IPv4 address.
There are various forms of NAT, the most commonly used form is NAPT (Network Address Port Translation) that also translates the TCP or UDP address (port) or the ICMP Query ID. This lets a network of hosts on a Private IPv4 network use a single public IPv4 address.
In theory this sounds possible, but perhaps not so likely that the ISP
or another node before the final destination would do so.
It is increasingly common that ISPs use NAPT in order to preserve their limited public IPv4 address space for businesses willing to pay for the privilege, and forcing the NAPT on their residential customers.
What if I write my own tcp/ip messages and enter a fake ip address
(let's say I don't care about the response) Will this still be sent to
the final destination?
Packets are routed by the destination address in the packet header.