Bi-directional replication is technically feasible, but is anything but simple, which is why it is not used unless absolutely necessary.
Streams can be setup to do bi-directional replication. See the Oracle® Streams Replication Administrator's Guide. However, Streams cannot handle automatic client fail-over and since it seems that high-availability is your goal, this is not an option.
The Oracle solution for this type of problem is RAC. It meets both the bi-directional replication requirement and the fail-over requirement. However, if you are looking for storage redundancy, it does not provide that as the database storage must be shared between the servers. If your primary concern is instance failure, then it will help you. Since you are on Enterprise it is an extra cost option, but if you can tolerate downgrading to Standard Edition, you can run RAC without any additional cost.
Another option would be to turn your two servers into Virtual Machine Hosts and virtualize your two databases. This again would not provide storage redundancy, but would allow you to transparently migrate either database to either server, running them on the same server when there is maintenance to be done or a server outage occurs.
The Golden Gate product Oracle acquired does bi-directional replication and is more flexible than streams, but at a higher cost.
There are other options at various levels of granularity and capability all the way from Materialized Views over database links to storage based snapshots. Consider carefully what you need and whether a solution meets your primary requirements.